iOS 支付寶的集成與遇到的問題


在iOS中接入支付寶SDK進行支付

首先,需要到支付寶的官網下載SDK   https://app.alipay.com/market/productIndex.htm

選擇移動支付

點擊進去之后,找到技術集成面板,下載SDK

這個開發包種有技術集成文檔,Demo,需要用到的庫等文件,這個東西需要看一下,關於錢的東西還是耐心一點比較好

其中即時到帳批量退款那一個文件夾我沒有看,應該還用不到

商戶接入支付寶收銀台界面展示標准這個文件夾需要看,里面有需要用到的logo文件

支付寶錢包支付接口開發包是真正對開發有用的東西,其中有兩個文檔,如果沒有時間的話,就只看那個接入與使用規則文檔,其中第五條集成流程詳解

找到iOS的Demo將其解壓

 

雖然使用文檔上寫的特別簡單,似乎只需要拖進去兩個文件,但是其實不是這樣的,需要拖進去的文件有很多

libraries中需要存在的文件有

為什么支付寶自己的Demo怎么運行怎么順暢,而我剛把類庫導進去就報錯呢,那是因為支付寶自己的pch文件中寫了兩個import     

#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

而且,特么的根本不通知一聲

所以:

可能遇到的報錯問題

1

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

解決辦法:暫時不知道內部原因,添加#import <Foundation/Foundation.h>之后錯誤消除

2

解決辦法:暫時不知道內部原因,添加#import <Foundation/Foundation.h>之后錯誤消除

3

解決辦法:

這個東西搞了一天我也是醉了,路徑原因

在Build Settings中搜索“search”關鍵字,找到search paths

在header search paths 中添加新的路徑

$(SRCROOT)/“openssl文件夾所在路徑”

在這個Demo中,路徑就應該是      $(SRCROOT)/AliPaySDKTest/CBAliPay

這樣error就消除了

4

沒有添加SystemConfiguration.framework

5 Undefined symbols for architecture x86_64:

  "CreateRSADataSigner(NSString*)", referenced from:

      -[CBAliPayViewController viewDidLoad] in CBAliPayViewController.o

這是因為你的調用支付寶控件的執行文件使用的是oc與c++混編,這里需要改成使用oc編譯器來編譯

所以,要調用支付寶,最好單獨用一個文件來寫,不然可能會跳坑,比如說我,把網銀的調用代碼和支付寶的調用代碼寫到一起,網銀需要oc混編,而支付寶不讓混編,最后還要再分開單獨寫,不說了,全都是淚

這就是遇到的全部問題,一個問題一個坑,跳坑跳的好酸爽

 

然后就是在項目中添加代碼

    /*============================================================================*/
    /*=======================需要填寫商戶app申請的===================================*/
    /*============================================================================*/
    //這里的三個參數是公司和支付寶簽約之后得到的,沒有這三個參數無法完成支付
    NSString *partner = @"";
    NSString *seller = @"";
    NSString *privateKey = @"";
    /*============================================================================*/
    /*============================================================================*/
    /*============================================================================*/
    
    //partner和seller獲取失敗,提示
    if ([partner length] == 0 ||
        [seller length] == 0 ||
        [privateKey length] == 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                        message:@"缺少partner或者seller或者私鑰。"
                                                       delegate:self
                                              cancelButtonTitle:@"確定"
                                              otherButtonTitles:nil];
        [alert show];
        return;
    }
    
    /*
     *生成訂單信息及簽名
     */
    //將商品信息賦予AlixPayOrder的成員變量
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.seller = seller;
#warning 這里需要填商品信息
    order.tradeNO = @""; //訂單ID(由商家自行制定)
    order.productName = @"測試商品"; //商品標題
    order.productDescription = @"這是一個測試商品"; //商品描述
    order.amount = @"0.01"; //商品價格
    order.notifyURL = @""; //回調URL   這個URL是在支付之后,支付寶通知后台服務器,使數據同步更新,必須填,不然支付無法成功
    
    //下面的參數是固定的,不需要改變
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";
    order.inputCharset = @"utf-8";
    order.itBPay = @"30m";
    order.showUrl = @"m.alipay.com";

    //應用注冊scheme,在AlixPayDemo-Info.plist定義URL types
    //如果不知道scheme是神馬東西,請自行百度
    NSString *appScheme = @"";
    
    //將商品信息拼接成字符串
    NSString *orderSpec = [order description];
    
    //獲取私鑰並將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規范,並將簽名字符串base64編碼和UrlEncode
    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"];
        
        
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"使用支付寶的支付結果 %@",resultDic);
            
        }];
        
    }

支付寶到這里就完了,可喜可賀

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM