|
|
<?php
|
|
|
/**
|
|
|
* 支付接口调测例子
|
|
|
* ================================================================
|
|
|
* index 进入口,方法中转
|
|
|
* submitOrderInfo 提交订单信息
|
|
|
* queryOrder 查询订单
|
|
|
*
|
|
|
* ================================================================
|
|
|
*/
|
|
|
namespace Org\SwiftpassSDK;
|
|
|
|
|
|
use Think\Exception;
|
|
|
|
|
|
require('Utils.class.php');
|
|
|
require('RequestHandler.class.php');
|
|
|
require('ClientResponseHandler.class.php');
|
|
|
require('PayHttpClient.class.php');
|
|
|
|
|
|
Class Swiftpass{
|
|
|
//$url = 'http://192.168.1.185:9000/pay/gateway';
|
|
|
|
|
|
public $resHandler = null;
|
|
|
private $reqHandler = null;
|
|
|
private $pay = null;
|
|
|
private $mch_id = null;
|
|
|
private $key = null;
|
|
|
|
|
|
|
|
|
|
|
|
private $cfg = null;
|
|
|
|
|
|
public function __construct($mch_id,$key){
|
|
|
$this->resHandler = new \ClientResponseHandler();
|
|
|
$this->reqHandler = new \RequestHandler();
|
|
|
$this->pay = new \PayHttpClient();
|
|
|
$this->mch_id=$mch_id;
|
|
|
$this->key=$key;
|
|
|
$this->reqHandler->setGateUrl("https://pay.swiftpass.cn/pay/gateway");
|
|
|
$this->reqHandler->setKey($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($param){
|
|
|
$this->reqHandler->setParameter('body',$param['body']);//接口类型
|
|
|
$this->reqHandler->setParameter('service',$param['service']);//接口类型 wap 'pay.weixin.wappay'
|
|
|
$this->reqHandler->setParameter('mch_id',$this->mch_id);//必填项,商户号,由平台分配
|
|
|
$this->reqHandler->setParameter('version',"2.0");
|
|
|
$this->reqHandler->setParameter('mch_create_ip',$param['ip']);//终端ip
|
|
|
$this->reqHandler->setParameter('total_fee',$param['pay_amount']*100);//金额
|
|
|
$this->reqHandler->setParameter('out_trade_no',$param['out_trade_no']);//金额
|
|
|
|
|
|
|
|
|
//通知地址,必填项,接收平台通知的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://'.$_SERVER ['HTTP_HOST'].'/callback.php?s=Notify/swiftpass_callback');//通知回调地址,目前默认是空格,商户在测试支付和上线时必须改为自己的,且保证外网能访问到
|
|
|
$this->reqHandler->setParameter('device_info',"AND_WAP");//'AND_WAP' IOS_WAP
|
|
|
$this->reqHandler->setParameter('mch_app_name',$param['game_name']);//应用名 默认填些游戏名称
|
|
|
$this->reqHandler->setParameter('mch_app_id','http://'.$_SERVER ['HTTP_HOST']);
|
|
|
if(isset($param['callback_url'])){
|
|
|
$this->reqHandler->setParameter('callback_url',$param['callback_url']);//跳转地址
|
|
|
|
|
|
}
|
|
|
$this->reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位
|
|
|
//$this->reqHandler->setParameter('sub_appid','wxdb077cbd82189896');
|
|
|
$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()){
|
|
|
//当返回状态与业务结果都为0时才返回支付链接,其它结果请查看接口文档
|
|
|
if($this->resHandler->getParameter('status') == 0 && $this->resHandler->getParameter('result_code') == 0){
|
|
|
if($param['service']=="pay.weixin.native"){
|
|
|
return array('code_img_url'=>$this->resHandler->getParameter('code_img_url'),
|
|
|
'code_url'=>$this->resHandler->getParameter('code_url'),
|
|
|
'status'=>000);
|
|
|
}else{
|
|
|
return array('status'=>000,'msg'=>'成功','pay_info'=>$this->resHandler->getParameter('pay_info'));
|
|
|
}
|
|
|
|
|
|
|
|
|
exit();
|
|
|
}else{
|
|
|
return array('status'=>500,'msg'=>'Error Code:'.$this->resHandler->getParameter('err_code').' Error Message:'.$this->resHandler->getParameter('err_msg'));
|
|
|
exit();
|
|
|
}
|
|
|
}
|
|
|
return array('status'=>500,'msg'=>'Error Code:'.$this->resHandler->getParameter('status').' Error Message:'.$this->resHandler->getParameter('message'));
|
|
|
}else{
|
|
|
return 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',"2.0");
|
|
|
$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('body',"游戏充值");
|
|
|
$this->reqHandler->setParameter('version',"2.0");
|
|
|
$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方式
|
|
|
|
|
|
$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()){
|
|
|
|
|
|
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',"2.0");
|
|
|
$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()){
|
|
|
|
|
|
if($this->resHandler->getParameter('status') == 0 && $this->resHandler->getParameter('result_code') == 0){
|
|
|
|
|
|
$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 callback(){
|
|
|
$xml = file_get_contents('php://input');
|
|
|
$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){
|
|
|
//echo $this->resHandler->getParameter('status');
|
|
|
// //此处可以在添加相关处理业务,校验通知参数中的商户订单号out_trade_no和金额total_fee是否和商户业务系统的单号和金额是否一致,一致后方可更新数据库表中的记录。
|
|
|
//更改订单状态
|
|
|
|
|
|
\Utils::dataRecodes('接口回调收到通知参数',$this->resHandler->getAllParameters());
|
|
|
echo 'success';
|
|
|
exit();
|
|
|
}else{
|
|
|
echo 'failure';
|
|
|
exit();
|
|
|
}
|
|
|
}else{
|
|
|
echo 'failure';
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// $req = new Request();
|
|
|
// $req->index();
|
|
|
?>
|