近期,公司項目需要集成支付業務(支付寶,微信,建行龍支付),對於支付寶、及微信就不做總結了,畢竟網絡上參考資料太多了。今天主要說一下集成建行支付,在開始之前先吐槽一下建行的集成文檔那叫一個爛啊!好吧!不說了,開始啦!
以下對建行支付的字段進行介紹:分為必要及非必要的;
//必要字段 @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=19991101234&PAYMENT=0.01&CURCODE=01&TXCODE=520100&REMARK1=&REMARK2=&TYPE=1&GATEWAY=&CLIENTIP=172.0.0.1®INFO=%u5C0F%u98DE%u4FA0&PROINFO=%u5145%u503C%u5361&REFERER=nihao
最后來說下MAC字段:MAC是由對String進行MD5加密得到;
//MD5加密 NSString *MAC = [MD5 MD5:String];
最后進行拼接完整字符串:在String后添加MAC字段值:如下:
https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?MERCHANTID=123456789&POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=0.01&CURCODE=01&TXCODE=520100&REMARK1=&REMARK2=&TYPE=1&GATEWAY=&CLIENTIP=®INFO=%u5C0F%u98DE%u4FA0&PROINFO=%u5145%u503C%u5361&REFERER=nihao&MAC=得到的加密值
在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相關 回調及加載 ============== - (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
3、支付完成能跳轉回 APP,但是收不到返回信息。
4、Code=-1002 "unsupported URL"
5、ERRORCODE = 0130Z110C100
提示:密鑰有問題,請檢查密鑰。
6、支付成功后點擊完成返回結果 code = -1
提示:
是否為一訂單號支付成功后在短時間內再次支付。