iOS快速集成支付寶

前期準(zhǔn)備

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

SDK集成流程

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

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

  2. 導(dǎo)入系統(tǒng)依賴(lài)庫(kù)

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

    加上之前導(dǎo)入的3個(gè)

    AlipaySDK.framework
    libcrypto.a
    libssl.a

    共計(jì)12個(gè)

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

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

但是會(huì)出現(xiàn)錯(cuò)誤:

c1000

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

c1000

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

配置代碼

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

- (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;
}

此時(shí)運(yùn)行,這2個(gè)文件:

base64.h openssl_wrapper.h

會(huì)出現(xiàn):

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

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

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

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

微信支付撰寫(xiě)中。。。。

后記:

有朋友反饋,運(yùn)行時(shí)在 rsa.h中,會(huì)出現(xiàn):

解決方法:

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

一樣把文件夾拖進(jìn)去!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 說(shuō)明: 前提你已經(jīng)申請(qǐng)了開(kāi)通支付寶商戶(hù),在支付寶開(kāi)放平臺(tái),申請(qǐng)了應(yīng)用。 1.需要要demo的留下郵箱。 2.其中的...
    陽(yáng)光的大男孩兒閱讀 3,546評(píng)論 9 3
  • 實(shí)現(xiàn)支付寶支付的準(zhǔn)備工作: 1.向支付寶簽約,成為支付寶的商戶(hù) 簽約完成后,支付寶會(huì)提供一些必要的數(shù)據(jù)給我們 商戶(hù)...
    Anson楊春安閱讀 8,263評(píng)論 0 6
  • 文章主要講到以下五部分: 一、支付寶開(kāi)放平臺(tái)創(chuàng)建應(yīng)用 二、簽約移動(dòng)支付功能 三、接入支付前的準(zhǔn)備工作附準(zhǔn)備工作中遇...
    sillen閱讀 17,953評(píng)論 1 10
  • 從日出到星辰 從雞鳴到蛐吟 驟然呈蜷縮狀 如皮筋強(qiáng)拉后 ,的反彈樣子 也要挨到我的夢(mèng)的沿 去通向明日的第一抹陽(yáng)光。
    哆嘞閱讀 111評(píng)論 0 0
  • 參加會(huì)議,我用5個(gè)W,1個(gè)H來(lái)反思回顧 1. Why 為什么要參加?想要什么樣的效果。 我報(bào)名了C1備...
    果粒橙is閱讀 781評(píng)論 1 0