怎么网站接入微信支付 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从
下载 SDK, 里面包含了 lib 文件夹和 example 文件夹。lib 文件夹里面是 SDK 的文件,example 文件夹里是接入示例代码
依赖 Frameworks: & & & & & &必需:CFNetwork.frameworkSystemConfiguration.frameworkSecurity.frameworklibc++.dylib& & & & & &百度钱包所需:libz.dyliblibstdc++.dylibCoreTelephony.frameworkAddressBook.frameworkAddressBookUI.frameworkAudioToolbox.frameworkCoreAudio.frameworkCoreGraphics.frameworkImageIO.frameworkMapKit.frameworkMessageUI.frameworkMobileCoreServices.frameworkQuartzCore.framework& & & &
根据所需渠道导入相应的库文件
添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 "TARGETS" 一栏,在 "Info" 标签栏的 "URL Types" 添加 "URL Schemes",如果使用微信,填入所注册的应用程序 id,如果不使用微信,则自定义,建议起名稍复杂一些,尽量避免与其他程序冲突。
添加 Other Linker Flags:在 Build Settings 搜索 Other Linker Flags ,添加 -ObjC。
二、发起支付:
1. Client 发送支付要素给 Server
用户选择渠道点击交易按钮, Client 收集交易所需的相关参数传递给 Server (服务器的地址为代码中的 URL)。
NSDictionary*&dict&=&@{&&&&@"channel"&:&channel,&//&渠道&alipay,&wx,&upacp,&bfb
&&&&@"amount"&&:&amount&&&//&金额};NSData*&data&=&[NSJSONSerialization&dataWithJSONObject:dict&options:NSJSONWritingPrettyPrinted&error:nil];NSString&*bodyData&=&[[NSString&alloc]&initWithData:data&encoding:NSUTF8StringEncoding];
[postRequest&setHTTPBody:[NSData&dataWithBytes:[bodyData&UTF8String]&length:strlen([bodyData&UTF8String])]];
[postRequest&setHTTPMethod:@"POST"];
[postRequest&setValue:@"application/&charset=utf-8"&forHTTPHeaderField:@"Content-Type"];
NSOperationQueue&*queue&=&[[NSOperationQueue&alloc]&init];
[NSURLConnection&sendAsynchronousRequest:postRequest&queue:queue&completionHandler:^(NSURLResponse&*response,&NSData&*data,&NSError&*connectionError)&{
&&&&NSHTTPURLResponse*&httpResponse&=&(NSHTTPURLResponse*)&&&&NSString*&charge&=&[[NSString&alloc]&initWithData:data&encoding:NSUTF8StringEncoding];&&&&//&...}];
2. Server 发送支付请求并将返回的支付凭据传给 Client
Server 接收并处理 Client 传过来的数据,使用 Ping++ 提供的方法向 Ping++ 发起交易,并将从 Ping++ 获得的带支付凭据的 Charge 对象返回给 Client。
&?php//引用&SDK&库文件require_once('/path/to/Pingpp.php');//获取客户端的参数,这里不能使用&$_POST&接收,所以我们提供了如下的参考方法接收$input_data&=&json_decode(file_get_contents("php://input"),&true);//TODO&客户在这里自行处理接收过来的交易所需的数据//设置API&KEY,如果是测试模式,这里填入&Test&Key;如果是真实模式,&这里填入&Live&Key。Pingpp::setApiKey("YOUR-KEY");//创建支付对象,发起交易$ch&=&Pingpp_Charge::create(&&&&//array&里需要哪些参数请阅读&API&Reference&文档
&&&&array(&&&&&&&&"order_no"&&=&&$orderNo,&&//商户系统自己生成的订单号
&&&&&&&&"app"&&&&&&&=&&array("id"&=&&"YOUR-APP-ID"),&&//Ping++&分配给商户的应用&ID
&&&&&&&&"amount"&&&&=&&$amount,&&//交易金额
&&&&&&&&"channel"&&&=&&$channel,&&//交易渠道
&&&&&&&&"currency"&&=&&"cny",&&&&&&&&"client_ip"&=&&$_SERVER["REMOTE_ADDR"],&&//发起交易的客户端的&IP
&&&&&&&&"subject"&&&=&&"Your&Subject",&&&&&&&&"body"&&&&&&=&&"Your&Body",&&&&&&&&"extra"&&&&&=&&null&//仅客户端为&HTML5&时此参数不为空,具体请参考&API&Reference&文档
& & & & & &
3. Client 调起支付控件完成支付
Client 接收 Server 返回的带支付凭据的 Charge 对象并用之调起支付插件完成交易
[Pingpp&createPayment:charge&viewController:viewController&appURLScheme:kUrlScheme&withCompletion:^(NSString&*result,&PingppError&*error)&{&&&&if&([result&isEqualToString:@"success"])&{&&&&&&&&//&...
&&&&}&else&{&&&&&&&&NSLog(@"PingppError:&code=%lu&msg=%@",&error.code,&[error&getMsg]);
4. 渠道同步返回支付结果给 Client
在上一步中用户完成了支付,渠道会返回一个支付结果给客户端,这里 Client 需要做的是处理此结果。
渠道为银联、百度钱包或者渠道为支付宝但未安装支付宝钱包时,交易结果会在调起插件时的 Completion 中返回。 渠道为微信、支付宝且安装了支付宝钱包时,请实现 UIApplicationDelegate 的 - application:openURL:sourceApplication:annotation: 方法:
&-&(BOOL)application:(UIApplication&*)application&openURL:(NSURL&*)url&sourceApplication:(NSString&*)sourceApplication&annotation:(id)annotation&{
&&&&[Pingpp&handleOpenURL:url&withCompletion:^(NSString&*result,&PingppError&*error)&{&&&&&&&&if&([result&isEqualToString:@"success"])&{&&&&&&&&&&&&//&...
&&&&&&&&}&else&{&&&&&&&&&&&&NSLog(@"PingppError:&code=%lu&msg=%@",&error.code,&[error&getMsg]);
&&&&}];&&&&return&&YES;
5. Server 收到 Ping++ 发送的交易结果的异步通知
Ping++ 会把从渠道收到的异步通知告诉商户 Server,客户 Server 接收到异步通知是一个带支付状态的完整的 Charge 对象,客户在接收到异步通知后需要回复 success 给 Ping++ 表明成功收到异步通知。所有的交易结果,商户均须以异步通知结果为准。关于异步通知具体请参见 API Reference 文档。
&?php$input_data&=&json_decode(file_get_contents("php://input"),&true);if($input_data['object']&==&'charge')&{&&&&//TODO&update&database
&&&&echo&'success';
}&else&{&&&&echo&'fail';
人打赏支持
码字总数 13797
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥iOS的Ping++支付接入步骤(详细)
Ping++ SDK
Ping++ SDK包括Server和Client两部分。
其中Server目前支持PHP,Java,Python,Node js,Ruby,Go,C
七种语言。
Client目前支持 iOS终端,Android终端,手机网页和PC网页这四种平台,分
Ping++ SDK
Ping++ SDK包括Server和Client两部分。
其中Server目前支持 ,,,Node.js,Ruby,Go,C# 七种语言。
Client目前支持 iOS终端,终端,手机网页和PC网页这四种平台,分别对应iOS,Android,HTML5和PC这四种Client SDK。
为了提高接入效率,Ping++提供了Live和Test两个工作模式提供开发者接入时使用,这两种模式切换非常简单,只需要在使用Server SDK 的过程中设置 API Key 时根据自己的需要使用相应的Key即可,设置为test key 表明使用Test 模式,设置为live key 则使用Live模式。Test Key 在你注册Ping++后即可自动获得,Live key 则是在你完成签约后获得。
1??Test 模式
Test模式提供开发测试时使用。因为Test模式吧支付流程与渠道草书隔离开,所以开发可以与渠道申请同时进行,从而缩短接入调试时间,Test 模式中发起虚拟交易不会调用真实支付控件,支付时客户端会调转到Ping++提供的支付页面
2??Live 模式
Live 时应用上线的模式。该模式下会发生真实的交易,调起真实的支付控件产生真实的资金流动,所以请确保在Test模式下所有的攻能逗测试通过后,在切换到Live模式。
应用在接入 Ping++ SDK 时,需要使用以下三个参数,这三个参数你可以在管理平台中获取:
1??API Key:是 Ping++ 分配给你的唯一身份标识,即上面说到的Test Key 和 Live Key。
2??应用ID:是 Ping++ 分配给你的应用的唯一标识。
3??Notify URL:是 Ping++ 用来向你的应用后台推送异步通知时使用的地址,该地址必须是一个互联网可以访问的地址。你可以在 Ping++ 管理平台中对应的应用内进行设置。
下面介绍下Ping++如何发起并完成支付
1. Client 发送支付要素给 Server
用户选择渠道点击交易按钮, Client 收集交易所需的相关参数传递给 Server (服务器的地址为代码中的 URL)
NSMutableURLRequest * postRequest=[NSMutableURLRequest requestWithURL:url];
NSDictionary* dict = @{
@"channel" : self.channel,
: amountStr
[postRequest setHTTPMethod:@"POST"];
[postRequest setValue:@"application/ charset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSData* data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
NSString *bodyData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]];
ViewController * __weak weakSelf =
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[self showAlertWait];
[NSURLConnection sendAsynchronousRequest:postRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
dispatch_async(dispatch_get_main_queue(), ^{
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)
[weakSelf hideAlert];
if (httpResponse.statusCode != 200) {
NSLog(@"statusCode=%ld error = %@", (long)httpResponse.statusCode, connectionError);
[weakSelf showAlertMessage:kErrorNet];
if (connectionError != nil) {
NSLog(@"error = %@", connectionError);
[weakSelf showAlertMessage:kErrorNet];
NSString* charge = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"charge = %@", charge);
//客户端从服务器端拿到charge对象后,调用下面的方法
//请看3.Client 调起支付控件完成支付
2. Server 发送支付请求并将返回的支付凭据传给 Client
Server 接收并处理 Client 传过来的数据,使用 Ping++ 提供的方法向 Ping++ 发起交易,并将从 Ping++ 获得的带支付凭据的 Charge 对象返回给 Client。
3. Client 调起支付控件完成支付
Client 接收 Server 返回的带支付凭据的 Charge 对象并用之调起支付插件完成交易.
//客户端从服务器端拿到charge对象后,调用下面的方法
[Pingpp createPayment:charge viewController:weakSelf appURLScheme:kUrlScheme withCompletion:^(NSString *result, PingppError *error) {
NSLog(@"completion block: %@", result);
if (error == nil) {
NSLog(@"支付成功");
NSLog(@"PingppError: code=%lu msg=%@", (unsigned
long)error.code, [error getMsg]);
NSLog(@"支付失败");
[weakSelf showAlertMessage:result];
4. 渠道同步返回支付结果给 Client
在上一步中用户完成了支付,渠道会返回一个支付结果给客户端,这里 Client 需要做的是处理此结果。
渠道为银联、百度钱包或者渠道为支付宝但未安装支付宝钱包时,交易结果会在调起插件时的 Completion 中返回。 渠道为微信、支付宝且安装了支付宝钱包时,请实现 UIApplicationDelegate 的 - application:openURL:sourceApplication:annotation: 方法:
#warning 渠道为微信、支付宝且安装了支付宝钱包时实现方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
[Pingpp handleOpenURL:[NSURL URLWithString:kUrl] withCompletion:^(NSString *result, PingppError *error) {
if ([result isEqualToString:@"success"]) {
NSLog(@"PingppError: code=%lu msg=%@", error.code, [error getMsg]);
return YES;
5. Server 收到 Ping++ 发送的交易结果的异步通知
Ping++ 会把从渠道收到的异步通知告诉商户 Server,客户 Server 接收到异步通知是一个带支付状态的完整的 Charge 对象,客户在接收到异步通知后需要回复 success 给 Ping++ 表明成功收到异步通知。所有的交易结果,商户均须以异步通知结果为准。关于异步通知具体请参见 API Reference 文档。

我要回帖

更多关于 微信支付接入流程 的文章

 

随机推荐