20180803UnionPay银联支付
程序员文章站
2023-01-21 20:55:58
LNMP环境下开发的银联支付(测试环境) 1.准备条件 a.银联支持API:https://open.unionpay.com/ajweb/help/api b.选择开发软件包 图示: c.我选择: 网关支付开发:https://open.unionpay.com/ajweb/product/new ......
LNMP环境下开发的银联支付(测试环境)
1.准备条件
a.银联支持API:https://open.unionpay.com/ajweb/help/api
b.选择开发软件包
图示:
c.我选择:
网关支付开发:https://open.unionpay.com/ajweb/product/newProDetail?proId=1
d.获取测试信息
第一步:在“我的产品”选择测试 项目
第二步:在“测试参数”中获取测试数据
图示:
2.代码配置
1.下载网关开发DEMO
2.修改sdk/acp_sdk.ini 配置文件信息
- ;后台通知地址,填写接收银联后台通知的地址,必须外网能访问
- acpsdk.backUrl=http://xxxx/Pay/webUnionPay
- ;前台通知地址,填写处理银联前台通知的地址,必须外网能访问
- acpsdk.frontUrl=http://xxxx/Pay/webUnionPay
- ;;;;;;;;;;;;;;;;;;;;;;;;;入网测试环境签名证书配置 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; 多证书的情况证书路径为代码指定,可不对此块做配置。
- ; 签名证书路径,必须使用绝对路径,如果不想使用绝对路径,可以自行实现相对路径获取证书的方法;测试证书所有商户共用开发包中的测试签名证书,生产环境请从cfca下载得到。
- ; 测试环境证书位于assets/测试环境证书/文件夹下,请复制到d:/certs文件夹。生产环境证书由业务部门邮件发送。
- ; windows样例:
- acpsdk.signCert.path=D:/certs/acp_test_sign.pfx
- ; linux样例(注意:在linux下读取证书需要保证证书有被应用读的权限)(后续其他路径配置也同此条说明)
- ;acpsdk.signCert.path=/SERVICE01/usr/ac_frnas/conf/ACPtest/acp_test_sign.pfx
- ; 签名证书密码,测试环境固定000000,生产环境请修改为从cfca下载的正式证书的密码,正式环境证书密码位数需小于等于6位,否则上传到商户服务网站会失败
- acpsdk.signCert.pwd=000000
- ;;;;;;;;;;;;;;;;;;;;;;;;;;加密证书配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; 敏感信息加密证书路径(商户号开通了商户对敏感信息加密的权限,需要对 卡号accNo,pin和phoneNo,cvn2,expired加密(如果这些上送的话),对敏感信息加密使用)
- acpsdk.encryptCert.path=d:/certs/acp_test_enc.cer
- ;;;;;;;;;;;;;;;;;;;;;;;;;;验签证书配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; 验签中级证书(证书位于assets/测试环境证书/文件夹下,请复制到d:/certs文件夹)
- acpsdk.middleCert.path=D:/certs/acp_test_middle.cer
- ; 验签根证书(证书位于assets/测试环境证书/文件夹下,请复制到d:/certs文件夹)
- acpsdk.rootCert.path=D:/certs/acp_test_root.cer
3.将demo/中三个文件代码简单修改(本人只保留其中php代码),就实现银联支付流程。
4.在搭建的本地环境中直接访问xxx/Form_6_2_FrontConsume.php。成功发起支付
发送支付请求:
- private function webPay($datas){
- global $UnionPayInfo;
- $params = array(
- //以下信息非特殊情况不需要改动
- 'version' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version, //版本号
- 'encoding' => 'utf-8', //编码方式
- 'txnType' => '01', //交易类型
- 'txnSubType' => '01', //交易子类
- 'bizType' => '000201', //业务类型
- 'frontUrl' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->frontUrl, //前台通知地址
- 'backUrl' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->backUrl, //后台通知地址
- 'signMethod' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod, //签名方法
- 'channelType' => '07', //渠道类型,07-PC,08-手机
- 'accessType' => '0', //接入类型
- 'currencyCode' => '156', //交易币种,境内商户固定156
- //TODO 以下信息需要填写
- 'merId' => $UnionPayInfo['merId'], //商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数
- 'orderId' => $datas["orderId"], //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
- 'txnTime' => date('YmdHis'), //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数
- 'txnAmt' => $datas["txnAmt"], //交易金额,单位分,此处默认取demo演示页面传递的参数
- // 订单超时时间。
- // 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。
- // 此时间建议取支付时的北京时间加15分钟。
- // 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。
- 'payTimeout' => date('YmdHis', strtotime('+15 minutes')),
- );
- 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;
5.下载Demo页面底部有个 视频参考(很有用)