-
首先在螞蟻金服開放平台建立一個應用
注冊應用,送出稽核,稽核通過後會給你一個APPID。這裡的賬号要用公司給你的支付寶賬号。 -
下載下傳支付寶官方demo&SDK
下載下傳完成之後,我們就要開始內建了。AlipaySDK.bundle
AlipaySDK.framework
把這SDK裡面的這兩個檔案導入到你的工程裡面
然後添加依賴
支付寶所需依賴.png
把上圖所需的依賴,全部添加進來
然後在你需要用到支付寶的頁面添加頭檔案
import <AlipaySDK/AlipaySDK.h>
command+R 運作保證沒有出錯。
這一點一定要注意,一個都不能少,要不然會報錯。
-
確定沒有錯之後,接下來就要調起支付寶了
上傳參數整個過程是要求在背景完成的,當然在app裡面也可以,不過最好放在背景,為了安全起見。
我們是需要傳這三個參數
然後伺服器給你傳回來一串簽名,你需要拿着這個簽名然後拼接,去傳給阿裡。dic[@"orderNo"] = self.payModel.orderno; dic[@"body"] = self.payModel.name; dic[@"orderName"] = self.payModel.name;
// NOTE: 調用支付結果開始支付 [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { NSLog(@"=====%@",resultDic); if ([resultDic[@"resultStatus"]intValue] == 9000) { NSLog(@"成功"); } else { NSLog(@"失敗"); } }];
這個方法就是調起支付寶
請求參數說明
app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是測試資料","out_trade_no":"IQJZSRC1YMQB5HU"}&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http://domain.merchant.com/payment_notify&sign_type=RSA×tamp=2016-08-25 20:26:31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=
這個是支付寶的标準簽名,如果簽名不規範,就會出錯。也能調起支付寶,但是會有錯誤碼。
報錯ALI38173/AE050001205
這個一般就是簽名格式錯誤,你可以先用官方的簽名放上去試試,看看報不報錯,把你的訂單号填寫上去。
報錯ALI59/ALI29/ALI14/ALI38173
1.partner填寫要正确,可以登入簽約賬号到支付寶背景商家服務中進行查詢對比;
2.移動支付請求的參數不對,列印請求參數payInfo,和文檔對比,請求參數是否正确,檢查文檔中必須傳的參數有沒有都請求給支付寶,有沒有參數漏掉的;參數有沒有少了、多了、亂碼、名稱不對,還有不要加自定義參數;
3.ALI29有可能是寶令被鎖了。
-
然後在appdelegate裡面添加
#pragma mark ios 9.0以上會調用此url回調
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
// 微信
if ([url.scheme isEqualToString:PAY_WEIXIN_ID]) {
[WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
}
// 支付寶
if ([url.scheme isEqualToString:@"SearchPigeonWorld"]) {
//跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
if ([self.appMyDelegate respondsToSelector:@selector(payCenterWeixinOnResultWith:)]) {
[self.appMyDelegate payCenterWeixinOnResultWith:[resultDic[@"resultStatus"]intValue] == 9000 ? YES : NO];
}
}];
}
return YES;
}
//支付成功時調用,回到第三方應用中
#pragma mark ios 9.0以前會調用此url回調
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// 微信
if ([url.scheme isEqualToString:PAY_WEIXIN_ID])
{
[WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
}
// 支付寶
if ([url.host isEqualToString:PAY_ALIPAY_appID]) {
//跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
if ([self.appMyDelegate respondsToSelector:@selector(payCenterWeixinOnResultWith:)]) {
[self.appMyDelegate payCenterWeixinOnResultWith:[resultDic[@"resultStatus"]intValue] == 9000 ? YES : NO];
}
}];
}