You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

281 lines
14 KiB
PHTML

5 years ago
<?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();
?>