TP3.2.3 接入银联支付

TP3.2.3 接入银联支付

    项目接入银联支付的过程, 在此记录下,希望能帮助开发盆友平坑。

    银联SKD链接:https://open.unionpay.com/ajweb/product/newProDetail?proId=1&cataId=14

    首先我们先下载官方提供的SDK  ,下载好了解压选择版本 ,里面有PHP  java  .net  这里我们自然是选择PHP版本的,接入前我们先配环境,它要我们PHP

  的版本 在5.3以上,并且需开启环境的curl、openssl功能。

   然后就是它提供的测试证书了,默认在window系统是放在D:/certs ,意思是在你的电脑的D创建一个名为certs 的文件夹,然后将4个证书放进去,测试的名为

  acp_test_enc.cer  acp_test_middle.cer  acp_test_root.cer  acp_test_sign.pfx ,在创建一个名为logs文件夹D:/logs/  放支付生成的日志文件,linux中请

 修改成Linux中的路径。

  如图:

  

TP3.2.3 接入银联支付

    你可以在assets文件夹中找到你要的证书,测试环境官方提供四个证书,生产环境官方提供三个,还个签名证书就是后缀为.pfx 的需要你去你的银联那里申请

  下载对应的你还需要可以需要解签名证书的密码 和商户号 , 这些后面都会提到的。

    在然后我们将名为SDK文件夹中的六个文件放到我们项目放到 ThinkPHP\Library\Vendor\Yunpay 的文件夹中

    

TP3.2.3 接入银联支付

     写逻辑代码前你还得前配置好你的acp_sdk.ini 文件 ,文件里面都写的很清楚,这里就不一一解释了,这里是我的支付代码

    

//银联充值操作 public function pay() { header ( 'Content-type:text/html;charset=utf-8' ); Vendor('Yunpay.acp_service'); //前台通知地址 $frontUrl = "http://".I("server.HTTP_HOST")."/Assets/rechargedetail"; //后台通知地址 $backUrl = "http://".I("server.HTTP_HOST"); $params = array( //以下信息非特殊情况不需要改动 'version' => \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version, //版本号 'encoding' => 'utf-8', //编码方式 'txnType' => '01', //交易类型 'txnSubType' => '01', //交易子类 'bizType' => '000201', //业务类型 'frontUrl' => $frontUrl, //前台通知地址 'backUrl' => $backUrl, //后台通知地址 'signMethod' => \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod, //签名方法 'channelType' => '08', //渠道类型,07-PC,08-手机 'accessType' => '0', //接入类型 'currencyCode' => '156', // 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。 'payTimeout' => date('YmdHis', strtotime('+15 minutes')) //订单发送时间 ); $txnAmt = I('post.txnAmt'); //交易金额 $orderId = I('post.orderId'); //商户订单号 //加入商户参数 $params['txnAmt'] = $txnAmt*100; $params['merId'] = C('Yunpay.merId'); //商户号 $params['orderId'] = $orderId; $params['txnTime'] = date('YmdHis'); //商品描述,可空 $body = trim(I('post.WIDbody')); $ud = session('users.uid'); $data = array( 'uid'=>$ud, //用户id 'win_code'=>$orderId, //商户订单号 'winsubject'=>I('post.WIDsubject'), //订单名称 'wintotal_amount'=>$txnAmt, //付款金额 'winbody'=>I('post.WIDbody'), //商品描述 'state'=>'yl', //支付方式 'status'=>'0', //是否支付 'ordertime'=>time() //交易时间 ); M("pay_record")->add($data); // 保存交易信息 \com\unionpay\acp\sdk\AcpService::sign ( $params ); $uri = \com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->frontTransUrl; $html_form = \com\unionpay\acp\sdk\AcpService::createAutoFormHtml( $params, $uri ); echo $html_form; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfxxg.html