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

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

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

注册APPID步骤1~3:bash

在AppDelegate.m中服务器

一、导入#import "WXApi.h"微信

二、继承<WXApiDelegate>网络

三、在app

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}
复制代码

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

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

四、在支付成功以后,支付结果返回,须要获取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];
    }
    
}
复制代码

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

五、微信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;
        }
    }
}
复制代码

六、建立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;
复制代码

七、在调用的控制器中,继承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];

}
复制代码

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

#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) {
        
    }];
}
复制代码

九、在点击方法中调用网络请求方法便可。

相关文章
相关标签/搜索