美文网首页
iOS初级开发学习笔记:微信充值

iOS初级开发学习笔记:微信充值

作者: 8e750c8f0fae | 来源:发表于2019-05-19 21:57 被阅读0次

    相关教程:微信支付开发流程

    一直到设置URL Scheme,均按照步骤进行。下面的内容将作为笔记着重介绍:

    注册APPID步骤1~3:

    在AppDelegate.m中

    1、导入#import "WXApi.h"

    2、继承<WXApiDelegate>

    3、在

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}
    

    中向微信终端注册ID:[WXApi registerApp:@"wx7588a96585cd8751"];

    需要注意的是:其中@"wx7588a96585cd8751"为URL Type中的

    image

    4、在支付成功之后,支付结果返回,需要获取url,也需要在Appdelegate中完成,代码如下:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        
        
        if([url.host isEqualToString:@"pay"]){
            //处理微信的支付结果
            [WXApi handleOpenURL:url delegate:self];
            return YES;
        }else{
            // 友盟回调
            return [self UMapplication:application openURL:url sourceApplication:sourceApplication annotation:annotation];
        }
        
    }
    
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
        
        //微信
        if([url.host isEqualToString:@"pay"]){
            //处理微信的支付结果
            [WXApi handleOpenURL:url delegate:self];
            return YES;
        }else{
            //友盟
            return [[UMSocialManager defaultManager] handleOpenURL:url options:options];
        }
        
    }
    

    两个方法中都要写,才能适用旧版本和新版本.

    5、微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的:(直接copy过来使用即可)

    // 微信显示支付结果
    -(void) onResp:(BaseResp*)resp
    {
        //启动微信支付的response
        NSString *payResoult = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
        if([resp isKindOfClass:[PayResp class]]){
            //支付返回结果,实际支付结果需要去微信服务器端查询
            switch (resp.errCode) {
                case 0:
                    payResoult = @"支付结果:成功!";
                    break;
                case -1:
                    payResoult = @"支付结果:失败!";
                    break;
                case -2:
                    payResoult = @"用户已经退出支付!";
                    break;
                default:
                    payResoult = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                    break;
            }
        }
    }
    

    6、创建model,内容为后台返回参数,固定格式,但要注意返回参数和微信服务器端返回字段的一一对应,

    @property (nonatomic, copy) NSString *appid;
    @property (nonatomic, copy) NSString *noncestr;
    @property (nonatomic, copy) NSString *packageStr;
    @property (nonatomic, copy) NSString *partnerid;
    @property (nonatomic, copy) NSString *prepayId;
    @property (nonatomic, copy) NSString *sign;
    @property (nonatomic, copy) NSString *signType;
    @property (nonatomic, copy) NSString *timestamp;
    

    7、在调用的控制器中,继承model,创建带参数的支付方法,(带参数是为了将后台返回的参数传给调用微信支付方法),内容也是固定格式的,只是右边的值需要对应修改:

    #pragma mark 微信支付方法
    - (void)WechatPay:(ABWechatRechargeModel *)model{
    
        //需要创建这个支付对象
        PayReq *req   = [[PayReq alloc] init];
        //由用户微信号和AppID组成的唯一标识,用于校验微信用户
        req.openID = model.appid;
        // 商家id,在注册的时候给的
        req.partnerId = model.partnerid;
        // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
        req.prepayId  = model.prepayId;
        // 根据财付通文档填写的数据和签名
        req.package  = model.packageStr;
        // 随机编码,为了防止重复的,在后台生成
        req.nonceStr  = model.noncestr;
        // 这个是时间戳,也是在后台生成的,为了验证支付的
        NSString * stamp = model.timestamp;
        req.timeStamp = stamp.intValue;
        // 这个签名也是后台做的
        req.sign = model.sign;
        //发送请求到微信,等待微信返回onResp
        [WXApi sendReq:req];
    
    }
    

    8、在网络请求方法中,调用微信支付方法,并传返回值:

    #pragma mark - request
    
    - (void)WechatPay{
        WS(weakself);
        
        NSMutableDictionary *dict = @{}.mutableCopy;
        [dict setValue:self.topupView.sumTextField.text forKey:@"total"];
        
        [LWNetWorkManager requestWithMethod:GET Url:KWeChatRecharge Parameters:dict success:^(id responseObject) {
            [weakself WechatPay:[ABWechatRechargeModel modelWithJSON:responseObject]];
        } requestRrror:^(id requestRrror) {
            
        }];
    }
    

    9、在点击方法中调用网络请求方法即可。

    相关文章

      网友评论

          本文标题:iOS初级开发学习笔记:微信充值

          本文链接:https://www.haomeiwen.com/subject/qulczqtx.html