第三方支付(微信、支付寶、銀聯)

前言

其實支付很簡單,下載官方的SDK,根據里面的開發者文檔和Demo,配置支付,不會可以問客服。(畢竟掏錢了嘛)

支付寶支付 (根據支付寶開發包流程進行操作)

1、下載官方SDK

支付寶SDK下載官方網站

https://doc.open.alipay.com/doc2/detail

2、添加依賴庫?


添加頭文件

(直接把官方的Order類文件拉進去 還有libcrypto.a libssl.a 這兩個靜態庫也拉進去 openssl 文件夾 Util文件夾 畢竟人家都寫好了 不用白不用)

#import "Order.h"?

#import "DataSigner.h"

#import<AlipaySDK/AlipaySDK.h>

iOS9需要 配置ATS(App TransPort Security)

在相對應的info.list文件添加ATS 在Allow Arbitrary Loads 選擇YES (沒辦法啊只能先用http吧)

報錯'NSObject' 'Base64' 添加頭文件 #import<Foundation/Foundation.h>

路徑找不到的錯誤 就在“Build Settings”選項卡,在搜索框中,以關鍵字“search”搜索,對“Header Search Paths”增加頭文件路徑:$(SRCROOT)/項目名稱。

重要參數

商戶的唯一的parnter和seller簽約后,支付寶會為每個商戶分配一個唯一的 parnter 和 seller

parnter是商戶ID 以 2088 開頭由 16 位純數字組成的字符串。

seller是賬戶ID 支付寶收款賬號,手機號碼或郵箱格式。

私鑰:用來加密.在前端進行使用

公鑰:用來解密.通過網頁的形式上傳到支付寶公司

事例Demo

首先在AppDelegate.m引入頭文件#import<AlipaySDK/AlipaySDK.h>

然后添加返回數據的方法

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options

{

[[AlipaySDK defaultService]

processOrderWithPaymentResult:url

standbyCallback:^(NSDictionary *resultDic) {

NSLog(@"result = %@",resultDic);//返回的支付結果?

//【由于在跳轉支付寶客戶端支付的過程中,商戶 app 在后臺很可能被系統 kill 了,所以 pay 接 口的 callback 就會失效,請商戶對 standbyCallback 返回的回調結果進行處理,就是在這個方法 里面處理跟 callback 一樣的邏輯】

}];

return YES;

}


在Info.plist里面添加URL types 添加item URL identifier 再添加 URL Schemes 再添加一個字符串類型 這就是返回的字符串 (必須添加 坑點!!!)


/*? ? *商戶的唯一的parnter和seller。? ? *簽約后,支付寶會為每個商戶分配一個唯一的 parnter 和 seller。? ? */? ? //以2088開頭由16位純數字字符串??

? NSString *partner = @"2088501566833063";//商戶ID ??

?NSString *seller = @"wangxiang@qq.com";//賬戶id手機號碼 或者郵箱格式? ?

?NSString *privateKey = @"好大一串密碼!";//私鑰? ? //公鑰用來解密的? ? ? ? //partner和seller獲取失敗,提示? ?

?if ([partner length] == 0 ||? ? ?

?? [seller length] == 0 ||? ?

?? ? [privateKey length] == 0)??

? {? ? ? ? NSLog(@"缺少partner和seller或者私匙");? ? ? ? return;? ? }? ? ?

?? /*? ? *生成訂單信息及簽名? ? */??

? //將商品信息賦予AlixPayOrder的成員變量??

? Order *order = [[Order alloc] init];? ?

?order.partner = partner;??

? order.seller = seller;? ?

?order.tradeNO = @"20160109095"; //訂單ID(由商家自行制定)??

? order.productName = @"煎餅果子鄭能量"; //商品標題? ?

?order.productDescription = @"煎餅果子最好吃只要998"; //商品描述??

? order.amount = [NSString stringWithFormat:@"%.2f",998.80]; //商品價格? ?

?//跟公司后臺服務器進行回調 支付完成后告訴后臺是否成功 ?(.2f貌似改了支付不能完成)

? order.notifyURL =? @"http://app.chengchina.com/wash/unionpay/mobilenotify"; //回調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 = @"alisdkdemo"; ? //將商品信息拼接成字符串? ?

?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);

}];

}

9000 訂單支付成功

8000 正在處理中

4000 訂單支付失敗

6001 用戶中途取消

6002 網絡連接出錯


微信支付

SDK下載網址 (微信更簡單)

【微信支付】APP支付開發者文檔

先注冊一個APPID

商戶在微信開放平臺申請開發APP應用后,微信開放平臺會生成APP的唯一標識APPID。

這個id是在AppDelegate.m里面的didFinishLaunchingWithOptions的方法里面用的

添加依賴庫


再添加SDKExport文件夾 從官方Demo拖

頭文件引用

#import "WXApi.h"

#import "WXApiObject.h"

客戶端錯誤碼 (這都是定好的)


編譯 改錯

實例

PayReq *request = [[PayReq alloc] init];

//? ? 商家向財付通申請的商家id

request.partnerId = @"1220277201";

//? ? 預支付訂單:包含商品的標題 描述 價格等商品信息

request.prepayId= @"920103900016010965/5";

//相當于一種標識

request.package = @"Sign=WXPay";

/** 隨機串,防重發 */

request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";

//從1970年之后的秒數 還是防止重復

request.timeStamp= 139777777; //時間戳

//商家根據微信開放平臺文檔對數據做的簽名 加密數據用的

request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";

//調用微信支付

[WXApi sendReq:request];


在AppDelegate.m里面添加#import "WXApi.h"? 協議WXApiDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ??

//向微信注冊appid??

? //Description : 更新后的api 起到解釋的作用??

? [WXApi registerApp:@"wx920fde9f97d60569" withDescription:@"微信支付"];? ??

? ? return YES;

}

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options

{

return [WXApi handleOpenURL:url delegate:self];

}

#pragma mark -WXApiDelegate

-(void)onResp:(BaseResp*)resp{

//微信支付后回調代理方法

//返回一些支付成功 失敗的信息

if ([resp isKindOfClass:[PayResp class]]){

PayResp*response=(PayResp*)resp;

switch(response.errCode){

case WXSuccess:

//服務器端查詢支付通知或查詢API返回的結果再提示成功

NSLog(@"支付成功");

break;

default:

NSLog(@"支付失敗,retcode=%d",resp.errCode);

break;

? ? ? }

? ?}

}


銀聯支付

官方SDK地址 ?(這個地址是個坑 銀聯就是牛 下載包還是RAR格式)

商家技術服務

銀聯支付代碼很少就兩行 難點在于配置銀聯支付

這個SDK有兩個版本 這兩個版本是不兼容的,兩個都導入就會報錯

1、支持無卡交易靜態庫,簡稱UPPayPlugin, 包含三個文件UPPayPlugin.h UPPayPluginDelegate.h libUPPayPlugin.a?

2、支持純無卡交易和VIPOS音頻口支付靜態庫 UPPayPluginPro (這是要用POS機的)

UPPayPluginPro.h ?UPPayPluginDelegate.h libUPPayPluginPro.a

如果是UPPayPlugin 要添加 QuartzCore.framework 、Security.framework 這兩個依賴庫

如果是UPPayPluginPro 要添加 QuartzCore.framework 、AudioToolbox.framework 這兩個依賴庫

把sdk 拉進工程 引入框架

實現<UPPayPluginDelegate>代理

//startPay 預支付訂單 標題 價格 描述

//mode 環境 00表示正式 01表示測試

//常見錯誤 把.m 改成.mm格式?

[UPPayPlugin startPay:@"201601090436140530789" mode:@"00" viewController:self delegate:self]; //就這一行

寫一個支付方法的回調

#pragma mark -UPPayPluginDelegate

-(void)UPPayPluginResult:(NSString *)result

{

NSLog(@"支付完成后的回調 %@",result);

}

在budsiting 搜索linking


搜索 c++ sta? C++ Standard Library 屬性值修改為 Compiler Default


搜索 c++ la? C++ Language Dialect 屬性值修改為 Compiler Default


這樣就完成配置了

運行 這樣就實現銀聯支付了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容