iOS第三方APP接入微信支付流程

使用pod下載微信支付SDK

platform:ios, ‘7.0‘
use_frameworks!
target ‘你的工程名’ do
   pod 'WeChat_SDK', '~> 1.7.5.1'
end

AppDelegate.m中注冊你申請的微信app_id

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //1 微信pay
    [WXApi registerApp:@"你的微信app_id" withDescription:@"你的項(xiàng)目名稱"];
  }

重寫AppDelegateopenURL方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options

{

    //設(shè)置微信WXApi的代理是當(dāng)前控制器
    return [WXApi handleOpenURL:url delegate:self];

}

AppDelegate繼承代理WXApiDelegate

@interface AppDelegate : UIResponder <UIApplicationDelegate,WXApiDelegate>

AppDelegate.m中重寫WXApiDelegateonResp方法

- (void)onResp:(BaseResp *)resp{
    NSString * strMsg = [NSString stringWithFormat:@"errorCode: %d",resp.errCode];
    NSLog(@"strMsg: %@",strMsg);
    
    NSString * errStr      = [NSString stringWithFormat:@"errStr: %@",resp.errStr];
    NSLog(@"errStr: %@",errStr);
    
    NSString * strTitle;
    
    //判斷是微信消息的回調(diào) --> 是支付回調(diào)回來的還是消息回調(diào)回來的.
    if ([resp isKindOfClass:[SendMessageToWXResp class]])
    {
        
        strTitle = [NSString stringWithFormat:@"發(fā)送媒體消息的結(jié)果"];
        
    }
    
    NSString * wxPayResult;
    
    //判斷是否是微信支付回調(diào)
    if ([resp isKindOfClass:[PayResp class]])
    {
        
        //支付返回的結(jié)果, 實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢
        strTitle = [NSString stringWithFormat:@"支付結(jié)果"];
        switch (resp.errCode)
        {
            case WXSuccess:
            {
                strMsg = @"支付結(jié)果:";
                NSLog(@"支付成功: %d",resp.errCode);
                wxPayResult = @"success";
                break;
            }
            case WXErrCodeUserCancel:
            {
                strMsg = @"用戶取消了支付";
                NSLog(@"用戶取消支付: %d",resp.errCode);
                wxPayResult = @"cancel";
                break;
            }
            default:
            {
                strMsg = [NSString stringWithFormat:@"支付失敗! code: %d  errorStr: %@",resp.errCode,resp.errStr];
                NSLog(@":支付失敗: code: %d str: %@",resp.errCode,resp.errStr);
                wxPayResult = @"faile";
                break;
            }
        }
        
        //全局廣播
        NSNotification * notification = [NSNotification notificationWithName:@"WXPay" object:wxPayResult];
        [[NSNotificationCenter defaultCenter] postNotification:notification];
    }

}

在調(diào)起支付的控制器XXX.m中接受廣播

- (void)viewDidLoad {
    [super viewDidLoad];
    //是否安裝微信
    if ([WXApi isWXAppInstalled])
    {
        //監(jiān)聽通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"WXPay" object:nil];
    }

}

處理廣播內(nèi)容

- (void)getOrderPayResult:(NSNotification *)notification
{    
    if ([notification.object isEqualToString:@"success"])
    {
        UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示信息" message:@"支付成功" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
        [alertView show];
        [self paySuccessHandler];
    }
    else{
        [self alert:@"提示" msg:@"支付失敗"];
        [self payFailHandler];
    }
    
}

//客戶端提示信息
- (void)alert:(NSString *)title msg:(NSString *)msg
{
    UIAlertView *alter = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alter show];
    
}

請求服務(wù)器對微信支付簽名后的數(shù)據(jù)

-(void)wechat{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    
    dict[@"nos"] = self.payNos; //訂單號
    dict[@"token"] = [self token];
    NSString* urlString = @"http://api.xxxxx.com/order/pay_wx";
    [manager GET:urlString parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        WXDataModel *dataModel = [WXDataModel mj_objectWithKeyValues:responseObject[@"data"]];
        
        WXSelectedModel *selectModel = [WXSelectedModel mj_objectWithKeyValues:dataModel.selected_pay_data];
        WechatModel *weChatModel = [WechatModel mj_objectWithKeyValues:selectModel.native];
        
        //調(diào)起支付
        BOOL result = [self wechatPay:weChatModel];
        NSLog(@"result = %d",result?YES:NO);
        
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];

}

調(diào)起支付,WechatModel是數(shù)據(jù)模型,封裝了服務(wù)器sign簽名后返回的數(shù)據(jù)

// 微信支付
-(BOOL)wechatPay:(WechatModel *)dict{
    PayReq *req             = [[PayReq alloc]init];
    req.partnerId           = dict.partnerid;
    req.prepayId            = dict.prepayid;
    req.nonceStr            = dict.noncestr;
    req.timeStamp           = dict.timestamp.intValue;
    req.package             = dict.package;
    req.sign                = dict.sign;
    return [WXApi sendReq:req];
}

銷毀廣播

/**
 銷毀廣播
 */
-(void)dealloc {
    [[NSNotificationCenter defaultCenter]removeObserver:self]; 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 微信支付 商家系統(tǒng)和微信支付系統(tǒng)主要交互說明: 步驟1:用戶在商品APP選擇商品,提交訂單,選擇微信支付.步驟2:...
    Jack_Baiyx閱讀 3,851評論 1 12
  • iOS支付 iOS支付分為兩類,第三方支付和應(yīng)用內(nèi)支付(內(nèi)購)。 第三方支付包括:支付寶支付、微信支付、銀聯(lián)支付、...
    請輸入賬號名閱讀 6,475評論 3 22
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,052評論 25 709
  • 實(shí)現(xiàn)支付寶支付的準(zhǔn)備工作: 1.向支付寶簽約,成為支付寶的商戶 簽約完成后,支付寶會提供一些必要的數(shù)據(jù)給我們 商戶...
    Anson楊春安閱讀 8,631評論 0 6
  • 萬事開頭難,很多事沒做前總覺得不可能成功、難度很大,沒開始就已經(jīng)被嚇住了而一直沒有付諸行動。然而一旦行動,會發(fā)現(xiàn)...
    若垂天云閱讀 266評論 0 0

友情鏈接更多精彩內(nèi)容