.NET接入UnionPay银联支付(一)手机wap支付
最近呢,比较忙,公司在接入银联全渠道支付,博主接手的wap支付,发表一下博主在接入的时候遇到的坑和注意事项,方便大家学习接入,爬坑的路上更顺利一点~
开发步骤
1. 以表单的方式组装要发送给银联全渠道系统的数据对象(包括IC卡交易信息域,VPC交易信息域,风控信息域等各域)。每个域填写方法可参考文档开发包中接口文档。
2. 将组装好的数据排序好并用&连接后签名,生成signature字段,可使用插件包提供的方法“SDKUtil.sign(未签名报文, 报文字符集);”具体签名机制请参照第8章节。可通过调用插件包提供的签名方法来完成签名。
3. 把所有要发送给银联全渠道系统的域包括signature和signMethod,组成表单以POST方式送给银联全渠道系统前台交易的地址。
4. 交易完成后,银联全渠道系统将把交易结果分别返回通知到商户通的前台应答地址和后台应答地址上,商户接收到交易通知后可分别调用“SDKUtil.convertResultStringToMap(应答报文);”方法进行应答报文解析,和“SDKUtil.validate(应答报文, 报文字符集)”方法进行签名验证。
一.证书坑
官方在测试的时候给了一个测试证书700000000000001_acp.pfx,这个证书我在测试的时候无法获得私钥。
代码1
错误:无法获得指定的程序类型错误
解决方案:换台机器试试...至今没有解决。
二.参数错误
需要的参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
param[ "version" ] = version; //M 版本号 param[ "encoding" ] = encoding; //O param[ "certId" ] = UnionpayCertUtil.GetSignCertId(); //证书ID param[ "bizType" ] = bizType; //M param[ "accessType" ] = accessType; //M param[ "merId" ] = merId; //M param[ "signMethod" ] = signmethod; param[ "channelType" ] = "08" ; param[ "frontUrl" ] = "http://localhost:57510/data.core/UnionPay/api.ashx" ; param[ "backUrl" ] = "http://localhost:57510/data.core/UnionPay/api.ashx" ; param[ "orderId" ] = serialID.ToString(); //M param[ "txnTime" ] = DateTime.Now.ToString( "yyyyMMddHHmmss" ); //M param[ "txnAmt" ] = (payfee * 100).ToString( "#" ); //M //用户根据需求可直接填写 param[ "txnType" ] = "01" ; //M param[ "txnSubType" ] = "01" ; //M param[ "currencyCode" ] = "156" ; |
如果你遇到了下面的错误,请根据上面的参数检查一下你的参数是否正确,是不是缺什么参数,注意你的回调地址,请确保url的正确性。
1.没有付款就直接跳至测试接口
2.直接跳转400的页面
支付成功后银联的服务器会回调你的backurl,查询是否支付成功。
最后奉上银联的sdk包,你们会用得到的sdk.rar
原文地址:http://www.lorna.com.cn/Articles/Index/c11d1b5c-20a1-4b03-bb74-639241ca89f2