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