你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS集成微信支付的一些坑(onResp不回調、閃回等)

iOS集成微信支付的一些坑(onResp不回調、閃回等)

編輯:IOS開發綜合

iOS集成微信支付總體來說還是比較容易的(如果沒有那些坑的話),所有文檔都在:

https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1

 

甚至只要看:

https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3

https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5

這兩部分就可以搞定。

遇到的大部分問題來自於另一個非常常用的第三方:友盟分享

 

關於

已經集成了友盟分享

只要下載微信sdk,並復制到友盟目錄下的UMSocial_Sdk_Extra_Frameworks/Wechat文件夾中,替換存在文件。

 

 

關於

發起支付之後只顯示一個確定按鈕

\

 

就是這樣,沒有任何錯誤提示,斷點返回的UrlSchemes,也只有一個ret=-2,官方文檔解釋為:

“無需處理。發生場景:用戶不支付了,點擊取消,返回APP。”

 

遇到這個問題,基本就是發起請求的參數傳錯了。

 

PayReq *request = [[[PayReq alloc] init] autorelease];
request.partnerId = @"10000100";
request.prepayId= @"1101000000140415649af9fc314aa427";
request.package = @"Sign=WXPay";
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
request.timeStamp= @"1397527777";
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];

 

 

對照文檔仔細排查吧,一定要注意大小寫,另外,sign簽名時,參數名要用小些(此處官方文檔有錯誤,文檔寫的用駝峰那種:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 步驟3-參與簽名的字段名,此處感謝 @挨踢實習生) 。

 

關於

閃回

 

發起支付後,打開微信,然後立即返回到了你的程序。

原因是項目同時集成了友盟,注冊微信的方法寫在了初始化友盟分享的前面,調換一下位置即可。

 

//向微信注冊,需要寫到初始化友盟分享的後面
[WXApi registerApp:@"wx000000000" withDescription:@"**weixinpay"];  //你的微信appid

 

 

 

關於

onResp不回調

 

這個問題依然來自跟友盟分享的沖突。雖然友盟提供了一個

 

+(BOOL)handleOpenURL:(NSURL *)url wxApiDelegate:(id)wxApiDelegate;

 

方法,但是通過此方法注冊的delegate並沒有被回調(這個有可能在不同系統版本,友盟sdk版本上效果不同)。

 

 

解決方法就是判斷一下回調是不是微信支付:

 

//url Schemes回調
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [self applicationOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [self applicationOpenURL:url];
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options
{
    return [self applicationOpenURL:url];
}

- (BOOL)applicationOpenURL:(NSURL *)url
{
    if([[url absoluteString] rangeOfString:@"wx000000000000://pay"].location == 0) //你的微信開發者appid
        return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    else
        return [UMSocialSnsService handleOpenURL:url wxApiDelegate:[WXApiManager sharedManager]];
}

 

 

 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved