iOS三方支付-微信支付

2017-11-02  本文已影响0人  退役程序猿

前言:

做了不少项目,三方支付也做了不少,经过的优化包括注意的事项今天闲暇就说说吧。其实一直以为三方的东西集成起来用起来也没有多难就一直么写一篇正经支付方面的文章。尤其在经过几次改版之后很大一部分工作都放在了服务端去做即增强了安全性也给我们移动端省了不少的事情。下面给大家展示一下微信支付流程。

微信支付逻辑以及流程

微信支付流程图.png

第3步选择产品:可以直接POST一个产品编码到服务端,服务端在去根据产品编码去查库得到相应产品实付金额,打折额度,以及优惠卷等等。这样以后也好做扩展。

第4步:其实这步也可以放在移动端去做,但是不建议,第一就是安全性得不到相应的保障,第二就是微信官方也不建议,最重要的就是咱移动端不是又麻烦了不少么,多一事不如少一事哈。。

1. 微信支付代码

1.1 调用微信支付

    #pragma mark - 微信支付
    /**
     微信支付
     *下列参数都由服务端返回
     @param orderString 订单串
     @param partnerId 商户ID
     @param package 商家根据财付通文档填写的数据和签名
     @param nonceStr 随机串
     @param openID 注册appID
     @param prepayId 预支付订单
     @param timestamp 时间戳
   */
    - (void)wechatPayWithOrderString:(NSString *)orderString
                andPartnerId:(NSString *)partnerId
                  andPackage:(NSString *)package
                 andNonceStr:(NSString *)nonceStr
                   andOpenID:(NSString *)openID
                 andPrepayId:(NSString *)prepayId
                andTimestamp:(NSString *)timestamp {

        if (![WXApi isWXAppInstalled]) {//检查用户是否安装微信
    
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"你还没有安装微信,可去App Store下载。" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"下载", nil];
            alert.tag = 20140923;
            [alert show];
    
            return;
        }
        // 发起微信支付,设置参数
        PayReq *request = [[PayReq alloc] init];
        request.partnerId = partnerId;
        request.package = package;
        request.nonceStr =  nonceStr;
        request.openID = openID;
        request.prepayId= prepayId;
        request.timeStamp = (UInt32)timestamp;
        request.sign = orderString;
        // 调用微信
        [WXApi sendReq:request];
    }

1.2 微信回调

// NOTE: 9.0以后使用新API接口
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
     if ([[NSString stringWithFormat:@"%@", url] rangeOfString:@"wx349d673e5287d525://pay"].location !=NSNotFound) {
            /*
            这里做微信支付回调处理,我是做了一个代理到代理类中处理的
            也可以直接在本类中写- (void)onResp:(BaseResp *)resp 方法得到回调参数判断成功还是失败做处理
            */
         return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
      }
     return YES
}

总结:看完是不是觉的有点简单,集成部分我没有说你们自己去翻官方文档比我说的好,剩下的几本就是三部曲
1.post产品给接口
2.收到返回参数调用微信方法
3.收到微信回调之后根据回调参数处理结果

Demo我就不放了,有些加密的东西不方便。有什么问题直接回复问就好了。z

上一篇 下一篇

猜你喜欢

热点阅读