PWLocalSDK 2.2.2

PWLocalSDK 2.2.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2018年1月

Kyle Vu 维护。



  • tien.vu

PWLocal iOS SDK

介绍

您是否需要在不同国家接受来自移动用户的付款,并考虑哪种付款方式最适合?PWLocal 是一个全球支付网关,使得您能够轻松地接受来自 200 多个国家的客户使用 100 多种替代付款方式的付款。PWLocal iOS SDK 将成为您应用程序的本地部分,消除了在付费时打开网络浏览器的必要性,从而提高了您的转化率。您只需要将库导入到您的 iOS 项目中,并开始使用我们的 SDK 接受应用内付款。这既快又简单!我们在下面为您指导整个流程。

工作原理?

  1. 客户在您的应用程序中点击“购买”按钮。
  2. 此时将调用 PWLocal SDK,并打开包含支付系统列表的应用程序对话框。
  3. 用户选择一个支付系统并点击“购买”。之后将打开一个新的应用程序对话框,可能是“谢谢”屏幕或需要提供付款详情的对话框,如信用卡号(如果需要)。
  4. 付款完成,您将调用回调函数来处理其结果。您的后端也会接到通知。

凭证

您的移动集成需要项目密钥。
您可以从 Paymentwall 的商户账户设置中获取这些 Paymentwall API 凭证,请在 Paymentwall 的应用程序设置中进行操作。

将 SDK 添加到您的项目中

手动

  1. 在菜单栏中点击“文件”,然后点击“将文件添加到 YOUR_PROJECT”。
  2. 在下载的仓库中选择“PWLocalSDK”目录。
  3. 确保选中了“将项目复制到目标组的文件夹中(如果需要)”。
  4. 点击“添加”。
  5. 点击您的项目,然后在“目标”选项卡中点击“构建设置”。
  6. 在“头文件搜索路径”中添加连接到 SDK 包含文件的链接,例如“$SOURCE_ROOT/PWLocalSDK/include”。
  7. 在“库搜索路径”中添加链接到文件“libPWLocalSDK.a”。

接受您的第一笔付款

导入

Objective-C
#import "PWLocalSDK.h"
Swift

将此命令添加到您的 Bridging-Header.h 文件中

#import "PWLocalSDK.h"

创建 PWLocal 请求

我们支持四种类型的 PWLocal 支付请求:VituralCurrencyDigitalGoodsDefautWidgetDigitalGoodsFlexibleWidgetCartDefaultWidget。我们支持三种 API 类型:VIRTUAL_CURRENCYDIGITAL_GOODS_FLEXIBLEDIGITAL_GOODS_DEFAULTCART。更多信息请参考:https://www.paymentwall.com/en/documentation/Digital-Goods-API/710

定义请求

我们定义了四种请求类型:VituralCurrencyDigitalGoodsDefautWidgetDigitalGoodsFlexibleWidgetCartDefaultWidget。您可以通过设置器简单地设置所需的参数。请注意,所有参数都从下划线命名格式更改为驼峰式命名格式。

示例
Objective-C
DigitalGoodsDefautWidget *digitalGoodsdefaultWidget = [DigitalGoodsDefautWidget new];
digitalGoodsdefaultWidget.key = PROJECT_KEY;
digitalGoodsdefaultWidget.uid = USER_ID;
digitalGoodsdefaultWidget.widget = WIDGET_TYPE;
Swift
let digitalGoodsdefaultWidget = DigitalGoodsDefautWidget()
digitalGoodsdefaultWidget.key = PROJECT_KEY
digitalGoodsdefaultWidget.uid = USER_ID
digitalGoodsdefaultWidget.widget = WIDGET_TYPE

自定义请求

如果我们定义的请求不符合您的需求。我们也支持使用 NSDictionary 并带有键和值的自定义请求,您可以自行处理,它遵循 https://www.paymentwall.com/en/documentation/Digital-Goods-API/710 中的参数。

示例
Objective-C
NSMutableDictionary *customSetting = [NSMutableDictionary new];
[customSetting setObject: PROJECT_KEY forKey:@"key"];
[customSetting setObject: USER_ID forKey:@"uid"];
[customSetting setObject: WIDGET_TYPE forKey:@"widget"];
Swift
var customSetting = [String: String]()
customSetting["key"] = PROJECT_KEY
customSetting["uid"] = USER_ID
customSetting["widget"] = WIDGET_TYPE

启动 PWLocal 对话框

定义请求

Objective-C
[PWLocalSDK showPWLocalViewControllerWithViewController:self
                                               delegate:self
                                                   type:DIGITAL_GOODS_FLEXIBLE
                                                 params:digitalGoodsdefaultWidget
                                              secretKey:SECRET_KEY];
Swift
PWLocalSDK.showPWLocalViewController(with: self,
                                     delegate: self,
                                     type: .DIGITAL_GOODS_FLEXIBLE,
                                     params: digitalGoodsdefaultWidget,
                                     secretKey: SECRET_KEY)

自定义请求

Objective-C
[PWLocalSDK showPWLocalViewControllerWithViewController:self
                                               delegate:self
                                                   type:DIGITAL_GOODS_FLEXIBLE
                                                 params:customSetting
                                              secretKey:SECRET_KEY];
Swfit
PWLocalSDK.showPWLocalViewController(with: self,
                                     delegate: self,
                                     type: .DIGITAL_GOODS_FLEXIBLE,
                                     params: customSetting,
                                     secretKey: SECRET_KEY)

自定义签名

secretKey 存储在自己的后端可以降低泄露风险。远程签名您的请求是推荐的做法以确保您的项目安全。您可以使用此方法获取完整的排序字符串,您只需要在末尾添加密钥来计算签名,params 可以是字典或任何预制的类。

Objective-C
NSString *stringToSign = [PWLocalSDK getStringToSign:params];
Swift
let stringToSign = PWLocalSDK.getStringToSign(params)

注意:如果您的 params 没有包含,此函数默认会添加 Param "success_url"="pwlocal://paymentsuccessful",如果您使用自己的webView,请跟踪此值以关闭webView。

额外头信息

请注意,如果您想使用自己的webview来显示小部件,您需要在请求中添加一些额外的标题,使用以下方法来获取它们并将它们添加到您的可变请求中:[request setValue:value forHTTPHeaderField:key]

Objective-C
NSDictionary *extra = [PWLocalSDK getExtraHeaders];
Swift
let extra = PWLocalSDK.getExtraHeaders()

处理结果

您必须将PWLocalSDKDelegate添加到您的ViewController中

Objective-C
@interface YourViewController : UIViewController <PWLocalSDKDelegate>
Swift
class YourViewController: UIViewController, PWLocalSDKDelegate

您可以通过定义回调函数来处理支付结果。建议在此处与您的服务器同步,以同步用户的余额、确认购买项目等。请参阅示例

Objective-C
#pragma mark - PWLocal Response
-(void)pwLocalResponse:(PWLocalResponse *)response {
    switch (response.code) {
        case PWLOCAL_SUCCESSFUL:
            break;
        case PWLOCAL_FAILED:
            break;
        case PWLOCAL_CANCELED:
            break;
        default:
            break;
    }
}
Swift
// MARK: - PWLocal Response
func pwLocalResponse(response: PWLocalResponse!) {
        switch response.code {
        case .PWLOCAL_SUCCESSFUL:
            break
        case .PWLOCAL_CANCELED:
            break
        case .PWLOCAL_FAILED:
            break
        }
}

response.code代码可以有以下值之一

PWLOCAL_SUCCESSFUL:用户已完成支付

PWLOCAL_CANCELED:用户已取消支付

PWLOCAL_FAILED:由于某些错误无法完成支付

  • 网络错误
  • 无效的请求

支付状态API工具

我们的SDK也支持支付状态API

获取支付状态

无签名调用

Objective-C
#pragma mark - PWLocal Get Payment Status
[PWLocalSDK checkPaymentStatusWithKey:PROJECT_KEY
                         agExternalId:A_EXTERNAL_ID
                                  uid:UID
                          signVersion:0
                         andSecretKey:@""
                           completion:^(PWLocalStatusResponse *response) {
                               if(response.code == PWLOCAL_STAUTS_SUCCESSFUL) {
                                   if(response.dataResponse.count > 0)                                          PaymentStatus *paymentStatus = response.dataResponse.firstObject;
                                   }
                               }
                               else
                                   NSLog(@"%@", response.message);
                           }];
Swift
// MARK: - PWLocal Get Payment Status
PWLocalSDK.checkPaymentStatusWithKey(PROJECT_KEY, agExternalId: A_EXTERNAL_ID, uid: UID, signVersion: 0, andSecretKey: "", completion: {
            (response) -> Void in
            
        })

签名调用

Objective-C
#pragma mark - PWLocal Get Payment Status
[PWLocalSDK checkPaymentStatusWithKey:PROJECT_KEY
                         agExternalId:A_EXTERNAL_ID
                                  uid:UID
                          signVersion:SIGN_VERSION
                         andSecretKey:SECRET_KEY
                           completion:^(PWLocalStatusResponse *response) {
                               if(response.code == PWLOCAL_STAUTS_SUCCESSFUL) {
                                   if(response.dataResponse.count > 0)                                          PaymentStatus *paymentStatus = response.dataResponse.firstObject;
                                   }
                               }
                               else
                                   NSLog(@"%@", response.message);
                           }];
Swift
// MARK: - PWLocal Get Payment Status
PWLocalSDK.checkPaymentStatusWithKey(PROJECT_KEY, agExternalId: A_EXTERNAL_ID, uid: UID, signVersion: SIGN_VERSION, andSecretKey: SECRET_KEY, completion: {
            (response) -> Void in
            
        })

服务器通知处理

每次成功的支付后,我们都会通知您的服务器。我们建议使用此功能,因为它是最可靠的了解支付是否成功通过的方式。即使您的应用程序因某种原因崩溃,您的服务器仍会收到通知,因此您可以稍后同步。有关更多信息,请参阅pingback处理文档

附录

支持的参数

以下是定义请求中支持的参数列表

虚拟货币的参数

数据类型 参数
NSString key
NSString uid
NSString widget
NSString ps
NSString sign_version
NSString birthday
NSString email
NSString sex
NSString evaluation
NSString location_city
NSString location_state
NSString location_address
NSString location_country
NSString location_zip
NSString 国家代码
NSString rv
NSString th
NSString tm
NSString pingback_url
NSString success_url

数字商品默认窗口参数

数据类型 参数
NSString key
NSString uid
NSString widget
NSString ps
NSString ts
NSString sign_version
NSString birthday
NSString 国家代码
NSString email
NSString sex
NSString evaluation
NSString firstname
NSString lang
NSString lastname
NSString location_city
NSString location_state
NSString location_address
NSString location_country
NSString location_zip
NSString default_goodsid
NSString display_goodsid
NSArray hide_goodsid
NSString pingback_url
NSString success_url

数字商品灵活窗口参数

数据类型 参数
NSString key
NSString uid
NSString widget
NSString 金额
NSString currencyCode
NSString ps
NSString ts
NSString ag_name
NSString ag_external_id
NSString ag_type
NSString ag_period_length
NSString ag_period_type
NSString ag_recurring
NSString ag_promo
NSString ag_trial
NSString ag_post_trial_period_length
NSString ag_post_trial_period_type
NSString ag_post_trial_external_id
NSString post_trial_amount
NSString post_trial_currencyCode
NSString ag_post_trial_name
NSString hide_post_trial_good
NSString sign_version
NSString birthday
NSString 国家代码
NSString email
NSString sex
NSString evaluation
NSString firstname
NSString lang
NSString lastname
NSString location_city
NSString location_state
NSString location_address
NSString location_country
NSString location_zip
NSString show_trial_non_recurring
NSString show_trial_recurring
NSString show_post_trial_non_recurring
NSString show_post_trial_recurring
NSString pingback_url
NSString success_url

购物车默认组件参数

数据类型 参数
NSString key
NSString uid
NSString widget
NSString 外部ID
NSString 价格
NSString 货币
NSString firstname
NSString lastname
NSString sign_version
NSString birthday
NSString email
NSString sex
NSString evaluation
NSString location_city
NSString location_state
NSString location_address
NSString location_country
NSString location_zip
NSString pingback_url