筆者最近的項目中使用到了支付的功能麦牺,也遇到了一些坑屡立。在這里跟大家分享一下总寻。首先附上微信的官方教程谤草。
相關(guān)配置
1.首先要申請開通微信支付衙傀,獲取到AppKey和AppSecret抬吟,一般來說,這一步一般是不需要我們?nèi)ド暾埖摹?br> 2.下載官方Demo统抬,導(dǎo)入需要的一些頭文件(DataMd5.h不需要導(dǎo)入火本,這是筆者其他地方用到的頭文件)
3.在Appdelegate里面注冊微信
[WxApi registerApp:"你申請的appid"];```
并且添加回調(diào)的方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [UMSocialSnsService handleOpenURL:url];
NSLog(@"%@",url.host);
if ([url.host isEqualToString:@"safepay"]) {
//跳轉(zhuǎn)支付寶錢包進行支付危队,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"%@",resultDic);
}];
}
if (result == FALSE) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return result;
}```
#pragma mark ios9的回調(diào)
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{ BOOL result = [UMSocialSnsService handleOpenURL:url];
if ([url.host isEqualToString:@"safepay"]) {
//跳轉(zhuǎn)支付寶錢包進行支付,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"%@",resultDic);
}];
}
if (result == FALSE) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return result;
}```
到了這里钙畔,一些基本的配置就已經(jīng)完成了茫陆。
# 調(diào)起支付
在點擊支付的按鈕中,添加事件擎析,可以參考微信官方的demo簿盅,用客戶端進行簽名,不過一般都是服務(wù)器返回數(shù)據(jù)的揍魂。這邊給大家參考一下
![支付事件](https://ooo.0o0.ooo/2016/04/24/571d9312c8fae.png)
上邊的是筆者從服務(wù)器獲取到的數(shù)據(jù)桨醋,然后發(fā)給微信客戶端,如果是我們iOS端自己簽名的話现斋,參考下面注釋的代碼就可以喜最。
# 筆者遇到的坑
- 不能掉起微信支付
如果不能掉起微信支付,那么肯定是你的urlScheme沒有配置好
具體配置如下庄蹋。
選擇你的項目中的 **TARGETS->INFO-> URL Types**,將其中的URL Schemes改成自己注冊的商戶APPID瞬内。
![設(shè)置url schemes](https://ooo.0o0.ooo/2016/04/24/571d95bec463b.png)
- iOS 9.0以上的系統(tǒng)如果要正常調(diào)起微信,還需要添加白名單
- 基本這樣就可以支付了限书,如果調(diào)起微信后只顯示一個白色的確定按鈕虫蝶,那么一定是你的參數(shù)有問題,如果是后臺返回的數(shù)據(jù)蔗包,那么極有可能是簽名的順序搞錯了秉扑。如果大家還有什么問題,可以添加我的 QQ:2774278740.