iOS快速集成支付寶

前期準備

  1. 接入前期準備工作包括商戶簽約和密鑰配置,已完成商戶可略過。
  2. 下載支付寶SDK支付寶SDK下載地址

SDK集成流程

  1. 將支付寶SDK中以下文件拷貝到項目文件夾下,并導入開發(fā)環(huán)境中。

    AlipaySDK.bundle
    AlipaySDK.framework
    libcrypto.a
    libssl.a
    AliSDKDemo\\Util 及下面所有文件
    AliSDKDemo\\openssl 及下面所有文件
    Order.hOrder.m

  2. 導入系統(tǒng)依賴庫

    在link Binary With Libraries 里面添加
    CoreMotion.framework
    CFNetwork.framework
    SystemConfiguration.framework
    QuartzCore.framework
    CoreText.framework
    CoreTelephony.framework
    CoreGraphics.framework
    libc++.tbd
    libz.tbd

    加上之前導入的3個

    AlipaySDK.framework
    libcrypto.a
    libssl.a

    共計12個

  3. 在需要使用SDK的文件中,增加頭文件引用。

#import <AlipaySDK/AlipaySDK.h> 
#import "Order.h"
#import "DataSigner.h"
#import <AliPaySDK/AlipaySDK.h>

但是會出現(xiàn)錯誤:

c1000

這是為什么呢,原因是項目沒有找到之前導入的AliSDKDemo\\Util 及下面所有文件,AliSDKDemo\\openssl 及下面所有文件頭文件,解決方法 在項目文件夾中找到Utilopenssl文件夾 ,在Header Search Paths中添加路徑

c1000

到這一步,SDK集成已經(jīng)完畢

配置代碼

  • 配置alipay支付
#pragma mark   ==============配置alipay支付==============
- (void)payAction
{
    /*
     *生成訂單信息及簽名
     */
    //將商品信息賦予AlixPayOrder的成員變量
    Order *order = [[Order alloc] init];
    order.partner = @"";//商戶在支付寶簽約時,支付寶為商戶分配的唯一標識號(以2088開頭的16位純數(shù)字)。
    order.sellerID = @"";////賣家支付寶賬號對應的支付寶唯一用戶號(以2088開頭的16位純數(shù)字),訂單支付金額將打入該賬戶,一個partner可以對應多個seller_id。
    order.outTradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)
    order.subject = @"測試商品"; //商品的標題/交易標題/訂單標題/訂單關鍵字等。
    order.body = @"runbey商品描述"; //對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body。
    order.totalFee = @"0.01"; //該筆訂單的資金總額,單位為RMB(Yuan)。取值范圍為[0.01,100000000.00],精確到小數(shù)點后兩位。
    order.notifyURL =  @"http://*****"; //支付寶服務器主動通知商戶網(wǎng)站里指定的頁面http路徑。
    
    //實際項目開發(fā)中 訂單信息應該由服務器返回
    
    
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";
    order.inputCharset = @"utf-8";
    order.itBPay = @"30m";
    order.showURL = @"m.alipay.com";
    
    //應用注冊scheme 便于支付結(jié)束后重新打開客戶端
    NSString *appScheme = @"";
    
    //將商品信息拼接成字符串
    NSString *orderSpec = [order description];
    NSLog(@"orderSpec = %@",orderSpec);
    
    //獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
    
    NSString * privateKey = @"";//商戶私鑰
    
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];
    
    //將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
    NSString *orderString = nil;
    if (signedString != nil) {
        orderString = [NSString stringWithFormat:@"%@&sign=\\"%@\\"&sign_type=\\"%@\\"",
                       orderSpec, signedString, @"RSA"];
        
        NSLog(@"簽名字符串:%@",orderString);
        
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"支付結(jié)果reslut = %@",resultDic);
        }];
    }
}

#pragma mark   ==============產(chǎn)生隨機訂單號==============

- (NSString *)generateTradeNO
{
    static int kNumber = 15;
    
    NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    srand((unsigned)time(0));
    for (int i = 0; i < kNumber; i++)
    {
        unsigned index = rand() % [sourceStr length];
        NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
        [resultStr appendString:oneStr];
    }
    return resultStr;
}

此時運行,這2個文件:

base64.h openssl_wrapper.h

會出現(xiàn):

Cannot find interface declaration for 'NSObject', superclass of 'Base64'

那么需要打開的文件base64.h openssl_wrapper.h,頂部添加頭:

#import <Foundation/Foundation.h>
  • 配置返回處理代碼
    在 AppDelegate.m 文件中,增加引用代碼:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    //如果極簡 SDK 不可用,會跳轉(zhuǎn)支付寶錢包進行支付,需要將支付寶錢包的支付結(jié)果回傳給 SDK
    if ([url.host isEqualToString:@"safepay"])
    {
    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
        NSLog(@"result = %@",resultDic);
    }];
    }
    return YES;
}
  • 添加URL Schemes
    點擊項目名稱,點擊“Info”選項卡,在“URL Types”選項中,點擊“+”, 在“URL Schemes”中輸入項目的bundleid。“bundleid”來自于 NSString *appScheme = @"****"(一般為項目的bundleid)
c1000

至此,完成了支付寶iOS客戶端的配置

微信支付撰寫中。。。。

后記:

有朋友反饋,運行時在 rsa.h中,會出現(xiàn):

解決方法:

在在項目文件夾中找到找到和項目同名的文件夾 ,在Header Search Paths中添加路徑

一樣把文件夾拖進去!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容