微信、支付宝支付集成--Ping++支付接入步骤
Ping++官方文档:接入文档
-
Ping++ SDK 包括Server 和 Client 两部分
- 其中 Server SDK 提供了 PHP, Java, Python, Node.js, Ruby, Go 六种语言版本。
-
Client SDK 提供了 Android, iOS, HTML5 三种平台版本。
应用在接入 Ping++ SDK 时,需要使用以下三个参数,这三个参数你可以在管理平台中获取:
API Key:API Key 是 Ping++ 分配给你的唯一身份标识。在 Server SDK 的使用过程中需要配置该参数。注册 Ping++ 账号并通过审核后,Ping++ 会分配给你两个 API Key,分别为:Test Key 和 Live Key。 Test Key 和 Live Key 分别表明使用测试模式和真实模式,你可以根据实际应用使用场景分别使用。
应用 ID:应用 ID 是 Ping++ 分配给你的应用的唯一标识。在 Server SDK 的使用过程中需要配置该参数。
Notify URL:Notify URL 是 Ping++ 系统用来向你的应用后台推送异步通知时使用的地址,该地址必须是一个互联网可以访问的地址。你可以在 Ping++ 管理平台中对应的应用内进行设置。
一、接入步骤(两种):
获取 SDK
-
第一种使用 CocoaPods
- 在 Podfile 添加
pod 'Pingpp', '~> 2.1.0'
- 1
- 默认会包含支付宝、微信、银联和百度钱包,你也可以自己选择渠道。目前有 ApplePay、Alipay、Wx、UnionPay、Bfb 五个子模块可选择,例如:
pod 'Pingpp/Alipay', '~> 2.1.0'
pod 'Pingpp/Wx', '~> 2.1.0'
pod 'Pingpp/UnionPay', '~> 2.1.0'
pod 'Pingpp/ApplePay', '~> 2.1.0'
- 1
- 2
- 3
- 4
- 运行
pod install
- 1
- 2
从现在开始使用 .xcworkspace 打开项目,而不是 .xcodeproj
添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 TARGETS 一栏,在 Info 标签栏的 URL Types 添加 URL Schemes,如果使用微信,填入微信平台上注册的应用程序 id(为 wx 开头的字符串),如果不使用微信,则自定义,建议起名稍复杂一些,尽量避免与其他程序冲突。允许英文字母和数字,首字母必须是英文字母,不允许特殊字符。
2.1.0 及以上版本,可打开 Debug 模式,打印出 log,方便调试。开启方法:[Pingpp setDebugMode:YES];。
-
第二种手动导入
在 Github 根据所需渠道下载相应分支的 iOS SDK,里面包含 lib 和 example 两个目录。example 目录下的是示例项目,你需要将 lib 目录下的文件添加到你的项目。
依赖 Frameworks:
必需:
CFNetwork.framework
SystemConfiguration.framework
Security.framework
libc++.dylib
libz.dylib
libsqlite3.0.dylib
- 1
- 2
- 3
- 4
- 5
- 6
百度钱包所需:
libstdc++.dylib
CoreTelephony.framework
AddressBook.framework
AddressBookUI.framework
AudioToolbox.framework
CoreAudio.framework
CoreGraphics.framework
ImageIO.framework
MapKit.framework
MessageUI.framework
MobileCoreServices.framework
QuartzCore.framework
Apple Pay 所需:
PassKit.framework
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
如果不需要某些渠道,删除 lib/Channels 下的相应目录即可。
- 添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 TARGETS 一栏,在 Info 标签栏的 URL Types 添加 URL Schemes,如果使用微信,填入微信平台上注册的应用程序 id(为 wx 开头的字符串),如果不使用微信,则自定义,建议起名稍复杂一些,尽量避免与其他程序冲突。允许英文字母和数字,首字母必须是英文字母,不允许特殊字符。
添加 Other Linker Flags:在 Build Settings 搜索 Other Linker Flags,添加 -ObjC。
2.1.0 及以上版本,可打开 Debug 模式,打印出 log,方便调试。开启方法:[Pingpp setDebugMode:YES];。5.添加 Other Linker Flags:在 Build Settings 搜索 Other Linker Flags ,添加 -ObjC。
二、发起支付:
-
说明
应用需要有选择渠道付款的页面,用户选择渠道发起付款请求时,客户端传递订单信息到应用服务器。
服务器接收订单信息后,调用 Ping++ Server SDK 发起支付请求。
请求完成后会获得 Ping++ 返回的 Charge 对象,由于这里的 Charge 对象用于客户端调起支付控件,所以我们称之为支付凭据。
服务器获得支付凭据后,将支付凭据返回给客户端,返回类型必须是 JSON 格式。
客户端接收到服务器返回的 JSON 格式的支付凭据后,使用 Client SDK 调用支付控件完成支付,用户在控件中完成付款。
在用户付完款后,Client SDK 会把支付结果返回给调用页面,客户端根据返回结果提示用户支付结果。
与此同时,Ping++ 会主动以 POST 方式给你配置在管理平台上的 Webhooks 通知地址发送支付结果。支付结果是 Event 对象,我们称之为 Webhooks 通知,订单状态需要以 Webhooks 通知为准。
下面是对比自己集成微信:
-
Client 发送支付要素给 Server
- 用户选择渠道点击交易按钮, Client 收集交易所需的相关参数传递给 Server (服务器的地址为代码中的 URL)。
-
NSDictionary* dict = @{ @"channel" : channel, // 渠道 alipay, wx, upacp, bfb
@"amount" : amount };// 金额
[postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]];
[postRequest setHTTPMethod:@"POST"];
[postRequest setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:postRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString* charge = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// ...}];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
-
2 .Server 发送支付请求并将返回的支付凭据传给 Client
- Server 接收并处理 Client 传过来的数据,使用 Ping++ 提供的方法向 Ping++ 发起交易,并将从 Ping++ 获得的带支付凭据的 Charge 对象返回给 Client。
3 . Client 调起支付控件完成支付
Client 接收 Server 返回的带支付凭据的 Charge 对象并用之调起支付插件完成交易
-
4 . 渠道同步返回支付结果给 Client
在上一步中用户完成了支付,渠道会返回一个支付结果给客户端,这里 Client 需要做的是处理此结果。
渠道为银联、百度钱包或者渠道为支付宝但未安装支付宝钱包时,交易结果会在调起插件时的 Completion 中返回。 渠道为微信、支付宝且安装了支付宝钱包时,请实现 UIApplicationDelegate 的 - application:openURL:sourceApplication:annotation: 方法:
-
5 . Server 收到 Ping++ 发送的交易结果的异步通知
- Ping++ 会把从渠道收到的异步通知告诉商户 Server,客户 Server 接收到异步通知是一个带支付状态的完整的 Charge 对象,客户在接收到异步通知后需要回复 success 给 Ping++ 表明成功收到异步通知。所有的交易结果,商户均须以异步通知结果为准。关于异步通知具体请参见 API Reference 文档。
具体参见:Ping++接入指南