第三方支付(微信、支付宝、银联)

前言

其实支付很简单,下载官方的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


这样就完成配置了

运行 这样就实现银联支付了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容