Files
2026-03-15 01:27:05 +08:00

385 lines
13 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 支付接口调测例子
* ================================================================
* index 进入口,方法中转
* submitOrderInfo 提交订单信息
* queryOrder 查询订单
*
* ================================================================
*/
require('Utils.class.php');
require('config/config.php');
require('class/RequestHandler.class.php');
require('class/ClientResponseHandler.class.php');
require('class/PayHttpClient.class.php');
Class Request
{
//$url = 'http://192.168.1.185:9000/pay/gateway';
/**
* @var ClientResponseHandler
*/
private $resHandler = null;
/**
* @var RequestHandler
*/
private $reqHandler = null;
/**
* @var PayHttpClient
*/
private $pay = null;
/**
* @var Config
*/
private $cfg = null;
public function __construct()
{
$this->Request();
}
public function Request()
{
$this->resHandler = new ClientResponseHandler();
$this->reqHandler = new RequestHandler();
$this->pay = new PayHttpClient();
$this->cfg = new Config();
$this->reqHandler->setGateUrl($this->cfg->C('url'));
$this->reqHandler->setKey($this->cfg->C('key'));
}
public function index()
{
$method = isset($_REQUEST['method']) ? $_REQUEST['method'] : 'submitOrderInfo';
switch ($method)
{
case 'submitOrderInfo'://提交订单
$this->submitOrderInfo();
break;
case 'queryOrder'://查询订单
$this->queryOrder();
break;
case 'submitRefund'://提交退款
$this->submitRefund();
break;
case 'queryRefund'://查询退款
$this->queryRefund();
break;
case 'callback':
$this->callback();
break;
}
}
/**
* 提交订单信息
*/
public function submitOrderInfo()
{
$this->reqHandler->setReqParams($_POST, array('method'));
$this->reqHandler->setParameter('service', 'pay.weixin.jspay'); /// 接口类型
$this->reqHandler->setParameter('mch_id', $this->cfg->C('mchId')); /// 必填项,商户号,由平台分配
$this->reqHandler->setParameter('version', $this->cfg->C('version'));
$this->reqHandler->setParameter('limit_credit_pay', '1');
$this->reqHandler->setParameter('op_user_id', 'yida');
//$this->reqHandler->setParameter('appid','wx50bb165fb00ef149');
$this->reqHandler->setParameter('op_shop_id', 'yida1');
$this->reqHandler->setParameter('op_device_id', 'yida2');
$this->reqHandler->setParameter('device_info', 'yida3');
//$this->reqHandler->setParameter('time_expire','20170306152200');
$this->reqHandler->setParameter('is_raw', '1');
/// 通知地址必填项接收平台通知的URL需给绝对路径255字符内格式如:http://wap.tenpay.com/tenpay.asp
//$notify_url = 'http://'.$_SERVER['HTTP_HOST'];
//$this->reqHandler->setParameter('notify_url', $notify_url.'/payInterface/request.php?method=callback');
$this->reqHandler->setParameter('notify_url', 'http://zhangwei.dev.swiftpass.cn/payInterface_gzzh1/request.php?method=callback');//
$this->reqHandler->setParameter('callback_url', 'https://www.baidu.com/');
$this->reqHandler->setParameter('nonce_str', mt_rand(time(), time() + rand())); /// 随机字符串,必填项,不长于 32 位
$this->reqHandler->setParameter('sub_openid', 'oZ1CSjktOzQRa-q2feBrBXg9VXuM');
$this->reqHandler->createSign(); /// 创建签名
$data = Utils::toXml($this->reqHandler->getAllParameters());
//var_dump($data);
$this->pay->setReqContent($this->reqHandler->getGateURL(), $data);
if ($this->pay->call())
{
$this->resHandler->setContent($this->pay->getResContent());
$this->resHandler->setKey($this->reqHandler->getKey());
if ($this->resHandler->isTenpaySign())
{
/// 当返回状态与业务结果都为0时才返回其它结果请查看接口文档
if ($this->resHandler->getParameter('status') == 0 && $this->resHandler->getParameter('result_code') == 0)
{
echo json_encode(array(
'token_id' => $this->resHandler->getParameter('token_id'),
'pay_info' => $this->resHandler->getParameter('pay_info'),
));
exit();
}
else
{
echo json_encode(array(
'status' => 500,
'msg' => 'Error Code:' . $this->resHandler->getParameter('status') . ' Error Message:' . $this->resHandler->getParameter('message'),
));
exit();
}
}
echo json_encode(array(
'status' => 500,
'msg' => 'Error Code:' . $this->resHandler->getParameter('status') . ' Error Message:' . $this->resHandler->getParameter('message'),
));
}
else
{
echo json_encode(array(
'status' => 500,
'msg' => 'Response Code:' . $this->pay->getResponseCode() . ' Error Info:' . $this->pay->getErrInfo(),
));
}
}
/**
* 查询订单
*/
public function queryOrder()
{
$this->reqHandler->setReqParams($_POST, array('method'));
$reqParam = $this->reqHandler->getAllParameters();
if (empty($reqParam['transaction_id']) && empty($reqParam['out_trade_no']))
{
echo json_encode(array(
'status' => 500,
'msg' => '请输入商户订单号,平台订单号!',
));
exit();
}
$this->reqHandler->setParameter('version', $this->cfg->C('version'));
$this->reqHandler->setParameter('service', 'unified.trade.query');//接口类型
$this->reqHandler->setParameter('mch_id', $this->cfg->C('mchId'));//必填项,商户号,由平台分配
$this->reqHandler->setParameter('nonce_str', mt_rand(time(), time() + rand()));//随机字符串,必填项,不长于 32 位
$this->reqHandler->createSign();//创建签名
$data = Utils::toXml($this->reqHandler->getAllParameters());
$this->pay->setReqContent($this->reqHandler->getGateURL(), $data);
if ($this->pay->call())
{
$this->resHandler->setContent($this->pay->getResContent());
$this->resHandler->setKey($this->reqHandler->getKey());
if ($this->resHandler->isTenpaySign())
{
$res = $this->resHandler->getAllParameters();
Utils::dataRecodes('查询订单', $res);
//支付成功会输出更多参数详情请查看文档中的7.1.4返回结果
echo json_encode(array(
'status' => 200,
'msg' => '查询订单成功请查看result.txt文件',
'data' => $res,
));
exit();
}
echo json_encode(array(
'status' => 500,
'msg' => 'Error Code:' . $this->resHandler->getParameter('status') . ' Error Message:' . $this->resHandler->getParameter('message'),
));
}
else
{
echo json_encode(array(
'status' => 500,
'msg' => 'Response Code:' . $this->pay->getResponseCode() . ' Error Info:' . $this->pay->getErrInfo(),
));
}
}
/**
* 提交退款
*/
public function submitRefund()
{
$this->reqHandler->setReqParams($_POST, array('method'));
$reqParam = $this->reqHandler->getAllParameters();
if (empty($reqParam['transaction_id']) && empty($reqParam['out_trade_no']))
{
echo json_encode(array(
'status' => 500,
'msg' => '请输入商户订单号或平台订单号!',
));
exit();
}
$this->reqHandler->setParameter('version', $this->cfg->C('version'));
$this->reqHandler->setParameter('service', 'unified.trade.refund');//接口类型
$this->reqHandler->setParameter('mch_id', $this->cfg->C('mchId'));//必填项,商户号,由平台分配
$this->reqHandler->setParameter('nonce_str', mt_rand(time(), time() + rand()));//随机字符串,必填项,不长于 32 位
$this->reqHandler->setParameter('op_user_id', $this->cfg->C('mchId'));//必填项,操作员帐号,默认为商户号
$this->reqHandler->createSign();//创建签名
$data = Utils::toXml($this->reqHandler->getAllParameters());//将提交参数转为xml目前接口参数也只支持XML方式
var_dump($data);
$this->pay->setReqContent($this->reqHandler->getGateURL(), $data);
if ($this->pay->call())
{
$this->resHandler->setContent($this->pay->getResContent());
$this->resHandler->setKey($this->reqHandler->getKey());
if ($this->resHandler->isTenpaySign())
{
//当返回状态与业务结果都为0时才返其它结果请查看接口文档
if ($this->resHandler->getParameter('status') == 0 && $this->resHandler->getParameter('result_code') == 0)
{
/*$res = array('transaction_id'=>$this->resHandler->getParameter('transaction_id'),
'out_trade_no'=>$this->resHandler->getParameter('out_trade_no'),
'out_refund_no'=>$this->resHandler->getParameter('out_refund_no'),
'refund_id'=>$this->resHandler->getParameter('refund_id'),
'refund_channel'=>$this->resHandler->getParameter('refund_channel'),
'refund_fee'=>$this->resHandler->getParameter('refund_fee'),
'coupon_refund_fee'=>$this->resHandler->getParameter('coupon_refund_fee'));*/
$res = $this->resHandler->getAllParameters();
Utils::dataRecodes('提交退款', $res);
echo json_encode(array(
'status' => 200,
'msg' => '退款成功,请查看result.txt文件',
'data' => $res,
));
exit();
}
else
{
echo json_encode(array(
'status' => 500,
'msg' => 'Error Code:' . $this->resHandler->getParameter('err_code') . ' Error Message:' . $this->resHandler->getParameter('err_msg'),
));
exit();
}
}
echo json_encode(array(
'status' => 500,
'msg' => 'Error Code:' . $this->resHandler->getParameter('status') . ' Error Message:' . $this->resHandler->getParameter('message'),
));
}
else
{
echo json_encode(array(
'status' => 500,
'msg' => 'Response Code:' . $this->pay->getResponseCode() . ' Error Info:' . $this->pay->getErrInfo(),
));
}
}
/**
* 查询退款
*/
public function queryRefund()
{
$this->reqHandler->setReqParams($_POST, array('method'));
if (count($this->reqHandler->getAllParameters()) === 0)
{
echo json_encode(array(
'status' => 500,
'msg' => '请输入商户订单号,平台订单号,商户退款单号,平台退款单号!',
));
exit();
}
$this->reqHandler->setParameter('version', $this->cfg->C('version'));
$this->reqHandler->setParameter('service', 'unified.trade.refundquery');//接口类型
$this->reqHandler->setParameter('mch_id', $this->cfg->C('mchId'));//必填项,商户号,由平台分配
$this->reqHandler->setParameter('nonce_str', mt_rand(time(), time() + rand()));//随机字符串,必填项,不长于 32 位
$this->reqHandler->createSign();//创建签名
$data = Utils::toXml($this->reqHandler->getAllParameters());//将提交参数转为xml目前接口参数也只支持XML方式
$this->pay->setReqContent($this->reqHandler->getGateURL(), $data);//设置请求地址与请求参数
if ($this->pay->call())
{
$this->resHandler->setContent($this->pay->getResContent());
$this->resHandler->setKey($this->reqHandler->getKey());
if ($this->resHandler->isTenpaySign())
{
//当返回状态与业务结果都为0时才返回其它结果请查看接口文档
if ($this->resHandler->getParameter('status') == 0 && $this->resHandler->getParameter('result_code') == 0)
{
/*$res = array('transaction_id'=>$this->resHandler->getParameter('transaction_id'),
'out_trade_no'=>$this->resHandler->getParameter('out_trade_no'),
'refund_count'=>$this->resHandler->getParameter('refund_count'));
for($i=0; $i<$res['refund_count']; $i++){
$res['out_refund_no_'.$i] = $this->resHandler->getParameter('out_refund_no_'.$i);
$res['refund_id_'.$i] = $this->resHandler->getParameter('refund_id_'.$i);
$res['refund_channel_'.$i] = $this->resHandler->getParameter('refund_channel_'.$i);
$res['refund_fee_'.$i] = $this->resHandler->getParameter('refund_fee_'.$i);
$res['coupon_refund_fee_'.$i] = $this->resHandler->getParameter('coupon_refund_fee_'.$i);
$res['refund_status_'.$i] = $this->resHandler->getParameter('refund_status_'.$i);
}*/
$res = $this->resHandler->getAllParameters();
Utils::dataRecodes('查询退款', $res);
echo json_encode(array(
'status' => 200,
'msg' => '查询成功,请查看result.txt文件',
'data' => $res,
));
exit();
}
else
{
echo json_encode(array(
'status' => 500,
'msg' => 'Error Code:' . $this->resHandler->getParameter('message'),
));
exit();
}
}
echo json_encode(array(
'status' => 500,
'msg' => $this->resHandler->getContent(),
));
}
else
{
echo json_encode(array(
'status' => 500,
'msg' => 'Response Code:' . $this->pay->getResponseCode() . ' Error Info:' . $this->pay->getErrInfo(),
));
}
}
/**
* 后台异步回调通知
*/
public function callback()
{
$xml = file_get_contents('php://input');
file_put_contents('1.txt', $xml);
$this->resHandler->setContent($xml);
//var_dump($this->resHandler->setContent($xml));
$this->resHandler->setKey($this->cfg->C('key'));
if ($this->resHandler->isTenpaySign())
{
if ($this->resHandler->getParameter('status') == 0 && $this->resHandler->getParameter('result_code') == 0)
{
$tradeno = $this->resHandler->getParameter('out_trade_no');
// 此处可以在添加相关处理业务校验通知参数中的商户订单号out_trade_no和金额total_fee是否和商户业务系统的单号和金额是否一致一致后方可更新数据库表中的记录。
//更改订单状态
Utils::dataRecodes('接口回调收到通知参数', $this->resHandler->getAllParameters());
ob_clean();
echo 'success';
file_put_contents('2.txt', 1);
exit();
}
else
{
echo 'failure1';
exit();
}
}
else
{
echo 'failure2';
}
}
}
$req = new Request();
$req->index();
?>