微信、支付宝支付集成--Ping++支付接入步骤-iOS版

Ping++官方文档:接入文档


  • Ping++ SDK 包括ServerClient 两部分

    • 其中 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'
  • 默认会包含支付宝、微信、银联和百度钱包,你也可以自己选择渠道。目前有 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'
  • 运行
pod install

从现在开始使用 .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

百度钱包所需:

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

如果不需要某些渠道,删除 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 通知为准。

下面是对比自己集成微信:

    1. 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];  
     // ...}];
  • 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++接入指南

你可能感兴趣的:(第三方使用)