• 集成建行龙支付(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=19991101234&PAYMENT=0.01&CURCODE=01&TXCODE=520100&REMARK1=&REMARK2=&TYPE=1&GATEWAY=&CLIENTIP=172.0.0.1&REGINFO=%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=&REGINFO=%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

      提示:

    是否为一订单号支付成功后在短时间内再次支付。
    
  • 相关阅读:
    懒加载数据,在取出数据时容易出的bug....
    小程序申请及小程序发布
    SSL证书申请及安装
    iview modal 覆盖问题
    取消div独占一行的特性
    GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)、(百度坐标转谷歌坐标)
    工厂方法模式
    STS创建SpringBoot项目
    snmp协议学习记录
    操作系统命令学习记录
  • 原文地址:https://www.cnblogs.com/xjf125/p/9650134.html
Copyright © 2020-2023  润新知