1. 程式人生 > >iOS中 最新支付寶支付(AliPay) 韓俊強的博客

iOS中 最新支付寶支付(AliPay) 韓俊強的博客

urlencode init 易用 微軟雅黑 per 回調 process class lis

每日更新關註:http://weibo.com/hanjunqiang 新浪微博

如今的支付方式一般有三種, 支付寶, 微信, 網銀. 個人認為最簡單易用的還是支付寶, 微信盡管看起來幣支付寶要簡單,可是後端太麻煩了, 網銀就不說了.
先放出官方文檔,免得還有人找不到文檔: https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1

環境搭建

  • 下載AliPayDK,官方鏈接,更新時間:2016/01/28 : http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo/WS_MOBILE_PAY_SDK_BASE.zip?spm=0.0.0.0.y0oP1q&file=WS_MOBILE_PAY_SDK_BASE.zip
    假設下載失敗,請換個瀏覽器(至少我用QQ瀏覽器沒有下載成功)

  • 所需文件導入
    1.按下面路徑
    ~/支付寶錢包支付接口開發包2.0標準版(20160120)/DEMO/clientdemo/支付寶錢包支付接口開發包2.0標準版(iOS 15.0.6)
    找到庫文件AlipaySDK.framework和資源包AlipaySDK.bundle拖入到你的project中,
    2.AliSDKDemo中libcrypto.a和libssl.a導入到你的project
    3.~/AliSDKDemo/AliSDKDemo下的openssl目錄,Util目錄,Order.h,Order.m拖入project
    4.導入下面庫
    假設是Xcode 7.0之後的版本號,須要加入libc++.tbd、libz.tbd;
    假設是Xcode 7.0之前的版本號,須要加入libc++.dylib、libz.dylib

    技術分享
  • project設置改動

  • 每日更新關註:http://weibo.com/hanjunqiang 新浪微博
    1.info.plist配置
    假設是iOS9.0之後(Xcode7.0)在info.plist中添加下面字典
    (也能夠單獨配置,有須要的請看官方文檔)
    技術分享

設置Schemes
在info下 URL Types設置你的Schemes
技術分享

2.Build Settings配置
以keyword“search”搜索,對“Header Search Paths”添加頭文件路徑:$(SRCROOT)/項目名稱
技術分享

3.這時候編譯會報錯,錯誤信息是
Cannot find interface declaration for ‘NSObject‘, superclass of ‘Base64‘


那麽須要打開報錯了的文件,添加頭文件。
import <Foundation/Foundation.h>
再編譯,就ok了

每日更新關註:http://weibo.com/hanjunqiang 新浪微博

iOS開發人員交流QQ群: 446310206

支付信息配置

在須要支付的文件裏導入頭文件

<code class="language-Objective-C hljs vala has-numbering"><span class="hljs-preprocessor">#import <AlipaySDK/AlipaySDK.h></span>
<span class="hljs-preprocessor">#import "DataSigner.h"</span>
<span class="hljs-preprocessor">#import "Order.h"</span></code>

配置訂單信息
這些都是演示樣例信息,這些事不能完畢支付的,要以實際信息為準才幹完畢支付

<code class="language-Objective-C hljs objectivec has-numbering"><span class="hljs-comment">//商戶ID</span>
    <span class="hljs-built_in">NSString</span> *partner = @<span class="hljs-string">""</span>;
    <span class="hljs-comment">//收款賬戶</span>
    <span class="hljs-built_in">NSString</span> *seller = @<span class="hljs-string">""</span>;
    <span class="hljs-comment">//私鑰</span>
    <span class="hljs-built_in">NSString</span> *privateKey = @<span class="hljs-string">""</span>;
    <span class="hljs-keyword">if</span> (partner<span class="hljs-variable">.length</span> == <span class="hljs-number">0</span> || seller<span class="hljs-variable">.length</span> ==<span class="hljs-number">0</span> || privateKey<span class="hljs-variable">.length</span> == <span class="hljs-number">0</span>) {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@<span class="hljs-string">"提示"</span> message:@<span class="hljs-string">"缺少partner或者seller或者私鑰。"</span> preferredStyle:(UIAlertControllerStyleAlert)];
        UIAlertAction *action = [UIAlertAction actionWithTitle:@<span class="hljs-string">"確定"</span> style:(UIAlertActionStyleDefault) handler:<span class="hljs-literal">nil</span>];
        [alert addAction:action];
        [<span class="hljs-keyword">self</span> presentViewController:alert animated:<span class="hljs-literal">YES</span> completion:<span class="hljs-literal">nil</span>];
    }
    <span class="hljs-comment">//訂單類</span>
    Order *order = [[Order alloc]init];
    order<span class="hljs-variable">.partner</span> = partner;
    order<span class="hljs-variable">.seller</span> = seller;
    order<span class="hljs-variable">.tradeNO</span> = @<span class="hljs-string">"234927348"</span>;<span class="hljs-comment">//訂單號</span>
    order<span class="hljs-variable">.productName</span> = @<span class="hljs-string">"商品名稱"</span>;
    order<span class="hljs-variable">.productDescription</span> = @<span class="hljs-string">"商品描寫敘述"</span>;
    order<span class="hljs-variable">.amount</span> = [<span class="hljs-built_in">NSString</span> stringWithFormat:@<span class="hljs-string">"%.2f"</span>, <span class="hljs-number">0.01</span>];<span class="hljs-comment">//價格</span>
    order<span class="hljs-variable">.notifyURL</span> =  @<span class="hljs-string">"http://blog.csdn.net/fish_yan_?viewmode=list"</span>; <span class="hljs-comment">//回調網址</span>
    order<span class="hljs-variable">.service</span> = @<span class="hljs-string">"mobile.securitypay.pay"</span>;
    order<span class="hljs-variable">.paymentType</span> = @<span class="hljs-string">"1"</span>;
    order<span class="hljs-variable">.inputCharset</span> = @<span class="hljs-string">"utf-8"</span>;
    order<span class="hljs-variable">.itBPay</span> = @<span class="hljs-string">"30m"</span>;
    order<span class="hljs-variable">.showUrl</span> = @<span class="hljs-string">"m.alipay.com"</span>;

    <span class="hljs-built_in">NSString</span> *appScheme = @<span class="hljs-string">"xueyan"</span>;

    <span class="hljs-comment">//將商品信息拼接成字符串</span>
    <span class="hljs-built_in">NSString</span> *orderSpec = [order description];

    <span class="hljs-comment">//獲取私鑰並將商戶信息簽名,外部商戶能夠依據情況存放私鑰和簽名,僅僅須要遵循RSA簽名規範,並將簽名字符串base64編碼和UrlEncode</span>
    <span class="hljs-keyword">id</span><DataSigner> signer = CreateRSADataSigner(privateKey);
    <span class="hljs-built_in">NSString</span> *signedString = [signer signString:orderSpec];

    <span class="hljs-comment">//將簽名成功字符串格式化為訂單字符串,請嚴格依照該格式</span>
    <span class="hljs-built_in">NSString</span> *orderString = <span class="hljs-literal">nil</span>;
    <span class="hljs-keyword">if</span> (signedString != <span class="hljs-literal">nil</span>) {
        orderString = [<span class="hljs-built_in">NSString</span> stringWithFormat:@<span class="hljs-string">"%@&sign=\"%@\"&sign_type=\"%@\""</span>,
                       orderSpec, signedString, @<span class="hljs-string">"RSA"</span>];

        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(<span class="hljs-built_in">NSDictionary</span> *resultDic) {
            <span class="hljs-comment">//【callback處理支付結果】</span>
            <span class="hljs-built_in">NSLog</span>(@<span class="hljs-string">"reslut = %@"</span>,resultDic);
        }];
    }</code>

就這麽多,假設手機裝有支付寶client, 則直接調用client,假設沒有client則調用網頁版

每日更新關註:http://weibo.com/hanjunqiang 新浪微博


技術分享

每日更新關註:http://weibo.com/hanjunqiang 新浪微博

上一版本號支付寶支付博文具體解釋:http://blog.csdn.net/qq_31810357/article/details/50374378

gitHub下載demo:https://github.com/XiaoHanGe/AliPay

iOS開發人員交流QQ群: 446310206

iOS中 最新支付寶支付(AliPay) 韓俊強的博客