天天看點

iOS中 支付寶錢包詳解/第三方支付

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

一、在app中成功完成支付寶支付的過程

  1、申請支付寶錢包。參考網址:

     這是使用支付寶支付的第一步,合作申請通過之後,會內建一個開發檔案。即使不申請也可以下載下傳,隻是demo中會缺少幾個必須的參數: 在demo中的 partnerconfig.h 檔案中可以看到

//合作身份者id,以2088開頭的16位純數字

#define partnerid @""

//收款支付寶賬号

#define sellerid  @""

//安全校驗碼(md5)密鑰,以數字和字母組成的32位字元

#define md5_key @""

//商戶私鑰,自助生成

#define partnerprivkey 

//支付寶公鑰(老闆給你的)

#define alipaypubkey   @"migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqcnxj/9qwvfgouh/y2w89l6bkrafljhnhgpdypubv64bfqnn1pjbczkim6qrdkbolpxmkkmifynkd6raoprih3/prqeb/vsw8oom8fxn67udyuybtqa23mml9q1+ilizwbc2aq2ubvorfxffl75p6/b5ksing9zpgmlcuyulkxplqidaqab"

隻有這幾個參數備齊之後,demo才可以完成支付,是以接下來第二步

2、生成rsa

    這個需要在windows系統下生成,開發文檔中也有生成的步驟。我是直接問背景要了這幾個參數,是以這一步隻能簡單寫到這。

 3、導入架構

      根據內建檔案的開發文檔,導入架構。可以參考demo。當四個參數都備齊之後可以先在demo上試一下能不能成功支付。然後再往自己的程式中導入。

二、代碼的使用

1、支付需要的參數

    在demo中的viewcontroller.h中可以看到有這麼一段代碼

@interface product :nsobject{

@private

float _price;

nsstring *_subject;

nsstring *_body;

nsstring *_orderid;

}

@property (nonatomic,assign) float price;

@property (nonatomic,retain) nsstring *subject;

@property (nonatomic,retain) nsstring *body;

@property (nonatomic,retain) nsstring *orderid;

@end

 這個就是所支付産品需要的幾個必要的字段。在開發文檔中可以看到需要好多參數,但在真正用時,隻需要特别注意這幾個就行。demo中有自動拼接的方法,到時候直接調用就行。

2、app和支付寶用戶端之間的跳轉

   nsstring *appscheme = @"alipaysdkdemo"; //應用跳轉的url

     *這裡要和plist檔案中url types 下面的字段保持一緻

3、支付結果的入口

  首先是wap端的入口,在viewcontroller.m檔案中可以找到,這裡傳回支付結果,比較簡單,不多說。

  獨立端的入口,在appdelegate裡面,我試着在viewcontroller中找這個,但最後沒找到。最後隻能設定一個觀察者,把支付結果發送過來再進行處理。

三、總結

 第一次接觸支付方面的東西,剛開始很迷茫,不明白其中财務方面是怎麼對上号的。

==================================具體看下面流程====================================

第一步:引入架構

iOS中 支付寶錢包詳解/第三方支付

第二步:注意架構及拉進相關檔案

iOS中 支付寶錢包詳解/第三方支付

第三步:上代碼

直接建立根視圖:

#import "rootviewcontroller.h"  

#import <alipaysdk/alipaysdk.h>  

#import "order.h"  

#import "datasigner.h"  

@interface rootviewcontroller ()  

@end  

@implementation rootviewcontroller  

- (void)viewdidload {  

    [super viewdidload];  

    uibutton *button = [uibutton buttonwithtype:(uibuttontypesystem)];  

    [button addtarget:self action:@selector(buttonaction :) forcontrolevents:(uicontroleventtouchupinside)];  

    button.frame = cgrectmake(100, 200, 100, 100);  

    [button settitle:@"支付" forstate:(uicontrolstatenormal)];  

    [button setbackgroundcolor:[uicolor yellowcolor]];  

    [self.view addsubview:button];  

    self.view.backgroundcolor = [uicolor greencolor];  

}  

點選事件:

- (void)buttonaction : (uibutton *)sender  

{  

//    nslog(@"支付");  

    /* 

     *點選擷取prodcut執行個體并初始化訂單資訊 

     */  

//    product *product = [self.productlist objectatindex:indexpath.row];  

     *商戶的唯一的parnter和seller。 

     *簽約後,支付寶會為每個商戶配置設定一個唯一的 parnter 和 seller。 

    /*============================================================================*/  

    /*=======================需要填寫商戶app申請的===================================*/  

    // 16位的純數字  

    nsstring *partner = @"2088。。公司唯一id";  

    // 收款賬戶  

    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;  

    order.tradeno = @"123456"; //訂單id(由商家自行制定)  

    order.productname = @"太空杯"; //商品标題  

    order.productdescription = @"耐摔的太空杯"; //商品描述  

    order.amount = [nsstring stringwithformat:@"%.2f",0.01]; //商品價格  

    order.notifyurl =  @"http://www.lanou3g.com"; //回調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  

    nsstring *appscheme = @"xiaohange";  

    //将商品資訊拼接成字元串  

    nsstring *orderspec = [order description];  

    nslog(@"orderspec = %@",orderspec);  

    //擷取私鑰并将商戶資訊簽名,外部商戶可以根據情況存放私鑰和簽名,隻需要遵循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(@"reslut = %@",resultdic);  

        }];  

//選中商品調用支付寶極簡支付  

- (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath  

最終效果:

iOS中 支付寶錢包詳解/第三方支付

繼續閱讀