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

1,159 阅读3分钟

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

一直到设置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中的

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、在点击方法中调用网络请求方法即可。