thinkphp集成银联网关支付简单实例

thinkphp集成银联手机网关支付简单实例

准备工作

  • 网银手机网关支付产品开发包下载:
    https://open.unionpay.com/ajweb/help/file/toDetailPage?id=379&flag=1

  • 网关支付技术开发包下载:
    https://open.unionpay.com/ajweb/help/file/toDetailPage?id=377&flag=1

  • 所需证书
    版本5.1需要5个证书,其中四个放在服务端,一个上传网银
    这里写图片描述
    还有一个用户的私钥证书,公钥需要进去商户中心上传

  • cfca证书密码,测试环境为000000,生产环境请修改为从cfca下载的正式证书的密码,并且在商户中心上传cfca证书并启用

  • 修改配置文件
    这里写图片描述

  • 引入ThinkPHP框架

    这里写图片描述

    .编写交易号获取接口
    这个接口为移动端提供,移动端提供订单号和金额,服务端生成交易号返回给移动端

<?php namespace Api\Controller; use Think\Controller; header ( 'Content-type:text/html;charset=utf-8' ); vendor('sdk.acp_service'); vendor('sdk.SDKConfig'); class UnionpayController extends Controller{ public function test(){ $x=new \SDKConfig(); $acp=new \AcpService(); $orderid=I('orderid'); $money=I('money'); $params = array( //以下信息非特殊情况不需要改动 'version' => $x->version, //版本号 'encoding' => 'utf-8', //编码方式 'txnType' => '01', //交易类型 'txnSubType' => '01', //交易子类 'bizType' => '000201', //业务类型 'frontUrl' => $x->frontUrl, //前台通知地址 'backUrl' => $x->backUrl, //后台通知地址 'signMethod' =>$x->signMethod, //签名方法 'channelType' => '08', //渠道类型,07-PC,08-手机 'accessType' => '0', //接入类型 'currencyCode' => '156',//交易币种,境内商户固定156  //TODO 以下信息需要填写 'merId' => "商户代码", //商户代码,请改自己的测试商户号 'orderId' =>$orderid, //商户订单号,8-32位数字字母,不能含“-”或“_” 'txnTime' => date('YmdHis'), //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间 'txnAmt' =>$money*100, //交易金额,单位分, ); $acp->sign ( $params ); // 签名 $url = $x->appTransUrl; $result_arr =$acp->post ($params,$url); if(count($result_arr)<=0) { //没收到200应答的情况 printResult ($url, $params, "" ); return; } if (!$acp->validate ($result_arr) ){ return; } if ($result_arr["respCode"] == "00"){ //成功 $return['status']=1; $return['msg']="success"; $data['tn']=$result_arr["tn"]; $return['data']['tn']= $data['tn']; $this->ajaxReturn($return, 'JSON'); //后续请将此tn传给手机开发,他们用此tn调起控件后完成支付; } else { } } }
阅读更多

更多精彩内容