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) {
        
    }];
}
複製代碼

九、在點擊方法中調用網絡請求方法便可。

相關文章
相關標籤/搜索