版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
一、在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中找這個,但最後沒找到。最後隻能設定一個觀察者,把支付結果發送過來再進行處理。
三、總結
第一次接觸支付方面的東西,剛開始很迷茫,不明白其中财務方面是怎麼對上号的。
==================================具體看下面流程====================================
第一步:引入架構
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI3cjN3IzN0AjMxIjMxUTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
第二步:注意架構及拉進相關檔案
第三步:上代碼
直接建立根視圖:
#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
最終效果: