微信支付的回調問題

1.導入微信支付的SDK
2.在需要用到支付的控制器中引入頭文件 #import "WXApi.h"
3.向自己的后臺服務器拿到支付的必要參數(最好是封裝起來)
4.判斷用戶是否安裝了微信

//判斷是否能夠跳轉到微信支付
  if([[UIApplication shareApplication] canOpenURL:[NSURL URLWithStirng:@"weixin"]]{                                                                         if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin:"]]) {
//KLLtenpayParam 是自定義的模型類,用戶解析服務器返回來的微信支付的必要參數;
 KLLtenpayParam *payreqParams = [[KLLtenpayParam alloc] init];
 [payreqParams setValuesForKeysWithDictionary:model[@"tenpayParam"]];
 PayReq *request = [[PayReq alloc] init];
 request.partnerId = payreqParams.partnerid;
 request.prepayId= payreqParams.prepayId;
 request.package = payreqParams.packageValue;
 request.nonceStr = payreqParams.nonceStr;
 request.timeStamp = payreqParams.timestamp.intValue;
 request.sign = payreqParams.sign;
 [WXApi sendReq:request];
}

5.在"AppDelegate"的.m文件中處理微信返回的url,要同時在三個地方寫

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)urlNS_DEPRECATED_IOS(2_0,9_0,"Please use application:openURL:options:");
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(nullableNSString*)sourceApplication annotation:(id)annotationNS_DEPRECATED_IOS(4_2,9_0,"Please use application:openURL:options:");`
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)optionsS_AVAILABLE_IOS(9_0);
// no equiv. notification. return NO if the application can't open for some reason

6."AppDelegate"的.m文件遵循 <WXApiDelegate>并重寫代理方法,并發出通知說明已經接受到了支付結果消息

//支付結果回調
-(void)onResp:(BaseResp *)resp{
NSString * strMsg = [NSString stringWithFormat:@"errorCode:%d",resp.errCode];
NSString * errStr = [NSString stringWithFormat:@"errStr: %@",resp.errStr];
NSLog(@"strMsg: %@",strMsg);
NSLog(@"errStr: %@",errStr);
NSString * strTitle;//提示alertview的標題
NSString * wxPayResult;//提示alertview的標題的支付結果`
    
      //判斷是否是微信支付回調 (注意是PayResp 而不是PayReq)
      if ([resp isKindOfClass:[PayResp class]])
        
    {
        //支付返回的結果, 實際支付結果需要去微信服務器端查詢
        strTitle = [NSString stringWithFormat:@"支付結果"];
        switch (resp.errCode)
        {
            case WXSuccess:
            {
                strMsg = @"支付結果:";
                wxPayResult = @"success";
                break;
                
            }
                
            case WXErrCodeUserCancel:
                
            {
                strMsg = @"用戶取消了支付";
                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:KLLWeiXinPay object:wxPayResult];
        [[NSNotificationCenter defaultCenter] postNotification:notification];
    }}

7.在支付的控制器監聽支付結果回調的通知

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • ps:先來支付寶的。首先集成支付寶的SDK,這個真心是運氣加上技術相結合才行~有時候一樣的工程,就是給你報錯~你能...
    臨淵還在閱讀 1,489評論 0 2
  • 看到個不錯的微信集成帖子,分享給大家!(因為微信支付也真是夠惡心的,TM要配置什么環境都沒說,肯定很多新手會被惡心...
    白屏閱讀 1,178評論 0 48
  • iOS支付 iOS支付分為兩類,第三方支付和應用內支付(內購)。 第三方支付包括:支付寶支付、微信支付、銀聯支付、...
    請輸入賬號名閱讀 6,271評論 3 22
  • 實現支付寶支付的準備工作: 1.向支付寶簽約,成為支付寶的商戶 簽約完成后,支付寶會提供一些必要的數據給我們 商戶...
    Anson楊春安閱讀 8,256評論 0 6
  • 魯迅筆下的看客,不過是人間的過客,置于“人生苦”這個自然狀態中,人有時候也需要難得的糊涂。
    月相照閱讀 750評論 0 1