集成建⾏龙⽀付(2019.01.24更新)
近期,公司项⽬需要集成⽀付业务(⽀付宝,,建⾏龙⽀付),对于⽀付宝、及就不做总结了,毕竟⽹络上参考资料太多了。今天主要说⼀下集成建⾏⽀付,在开始之
前先吐槽⼀下建⾏的集成⽂档那叫⼀个烂啊!好吧!不说了,开始啦!
以下对建⾏⽀付的字段进⾏介绍:分为必要及⾮必要的;
//必要字段
@property (copy, nonatomic) NSString *MERCHANTID ;//商户代码(*重要的)
@property (copy, nonatomic) NSString *POSID;//商户柜台代码(*重要的)
@property (copy, nonatomic) NSString *BRANCHID;//分⾏代码(*重要的)
@property (copy, nonatomic) NSString *ORDERID;//订单号:由商户提供,最长30位
@property (copy, nonatomic) NSString *PAYMENT;//付款⾦额:由商户提供,按实际⾦额给出
@property (copy, nonatomic) NSString *CURCODE;//币种,01表⽰⼈民币:01
@property (copy, nonatomic) NSString *TXCODE;//交易码由建⾏统⼀分配为520100
@property (copy, nonatomic) NSString *REMARK1;
@property (copy, nonatomic) NSString *REMARK2;
@property (copy, nonatomic) NSString *TYPE;//接⼝类型:1
@property (copy, nonatomic) NSString *PUB;//公钥后30位(*重要的)
@property (copy, nonatomic) NSString *GATEWAY; //⽹关类型
@property (copy, nonatomic) NSString *CLIENTIP;//客户端IP
@property (copy, nonatomic) NSString *REGINFO;//客户注册信息
@property (copy, nonatomic) NSString *PROINFO;//客户购买的商品
@property (copy, nonatomic) NSString *REFERER; //商户URL
//⾮必要字段
@property (copy, nonatomic) NSString *INSTALLNUM;//银⾏代码3
@property (copy, nonatomic) NSString *SMERID;//⼆级商户代码111
@property (copy, nonatomic) NSString *SMERNAME;//⼆级商户名称
@property (copy, nonatomic) NSString *SMERTYPEID;//⼆级商户类别代码112
@property (copy, nonatomic) NSString *SMERTYPE;//⼆级商户类别名称
@property (copy, nonatomic) NSString *TRADECODE;//交易类型代码001
@property (copy, nonatomic) NSString *TRADENAME;//交易类型名称
@property (copy, nonatomic) NSString *SMEPROTYPE;//商品类别代码1
@property (copy, nonatomic) NSString *PRONAME;//商品类别名称
@property (copy, nonatomic) NSString *THIRDAPPINFO; //客户端标识
@property (copy, nonatomic) NSString *TIMEOUT;//订单超时时间例:20161028101226
@property (copy, nonatomic) NSString *ISSINSCODE;//银⾏代码ICBC
另外还有⼀个特殊字段:THIRDAPPINFO,该字段有值的情况下,系统会优先调⽤app进⾏⽀付,在app未安装的情况下才会进⾏H5页⾯⽀付,将该字段值设置为你的应⽤程序
的URL Schemes,否则⽀付成功后返回不到你的APP。
@property (copy, nonatomic) NSString *THIRDAPPINFO; //客户端标识
以上均是必须参与摘要的字段,将以上字段进⾏拼接得到需加密字符串String。打印如下:
MERCHANTID=123456789&POSID=000000000&BRANCHID=110000000&ORDERID=199********&PAYMENT=0.01&CURCODE=01&TXCODE=520100&REMARK1=&REMARK2=&TYPE=1&GATEWAY=&CLIENTIP=172.0.0.1®INFO=%u 最后来说下MAC字段:MAC是由对String进⾏MD5加密得到;
//MD5加密
NSString *MAC = [MD5 MD5:String];
最后进⾏拼接完整字符串:在String后添加MAC字段值:如下:
b/CCBIS/ccbMain?MERCHANTID=123456789&POSID=000000000&BRA
NCHID=110000000&ORDERID=199********&PAYMENT=0.01&CURCODE=01&TXCODE=520100&REMARK1=&REMARK2=&TYPE=1&GATE 在plist中进⾏配置
URL types:设置URL Schemes
webView发起⽀付请求:
- (void)loadWithUrlStr:(NSString*)urlStr
{
if (urlStr.length > 0) {
dispatch_async(dispatch_get_main_queue(), ^{
NSURLRequest *webRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30];
[self.webView loadRequest:webRequest];
});
}
}
#pragma mark ============== webview相关回调及加载 ==============
sdk- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"%@",request.URL.absoluteString);
//简单的请求拦截处理
NSString *strM = request.URL.absoluteString;
if ([strM containsString:@"mbspay"]) {
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:strM] options:@{} completionHandler:nil];
return NO;
}
return YES;
}
使⽤上⾯的H5⽀付⽅式,出现了⼀些设备调不出建⾏APP进⾏⽀付,建⾏⼜给了新的解决⽅案:使⽤SDK⽂档。
请求参数跟上⾯的⼀样,不再进⾏说明:
第⼀步:
把 iOS 包中的压缩⽂件中以下⽂件(CCBNetPaySDK.framework,libWeChatSDK.a)拷贝到项⽬⽂件夹下,并导⼊到项⽬⼯程中(图 1)。并检查是否引⽤CCBNetPaySDK、libWeChatSDK.a (图 2)(如果项⽬中已有引⽤的 libWeChatSDK.a,则⽆需再导⼊ libWeChatSDK.a ⽂件,项⽬中也不⽤导⼊ WXApi.h 和 WXApiObject.h ⽂件,直接应⽤ CCBNetPaySDK.framework 中的 WXApi.h 和 WXApiObject.h ⽂件即可,如图 3)如需调⽤⽀付,则需另外配置 scheme (从开发平台注册 app 得到的 APPID),配置 APP 跳转后返回 scheme(商品参数THIRDAPPINFO,如图4)
图1:
图2:
图3:
第⼆步:调⽤SDK⽀付接⼝
⾸先,在需要调⽤ CCBNetPaySDK 的⽂件中,增加头⽂件引⽤。
然后选择相应的⽀付⽅法
⽀付⽅法列表:CCBNetPay.h 类接⼝主要为商户提供订单龙⽀付⽀付功能。
第三步:⽀付结果获取及处理
1、SDK 不能跳转⾄⼿机银⾏。
2、⽀付完成不能跳转回APP
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论