天天看點

內建iOS支付寶支付

  • 首先在螞蟻金服開放平台建立一個應用

    注冊應用,送出稽核,稽核通過後會給你一個APPID。這裡的賬号要用公司給你的支付寶賬号。
  • 下載下傳支付寶官方demo&SDK

    下載下傳完成之後,我們就要開始內建了。

    AlipaySDK.bundle

    AlipaySDK.framework

把這SDK裡面的這兩個檔案導入到你的工程裡面

然後添加依賴

內建iOS支付寶支付

支付寶所需依賴.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&notify_url=http://domain.merchant.com/payment_notify&sign_type=RSA&timestamp=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];

            }

        }];

    }