开发

支付

1.1 协议名

BBASMPaymentAdapterProtocol

1.2 功能说明

小程序开源的支付实现是必选,开源 Demo 实现方案是使用百度收银台 SDK 。百度收银台 SDK 聚合了多种主流的支付方式,包括:微信、支付宝、度小满等。了解百度收银台:https://smartprogram.baidu.com/docs/introduction/pay-intro/

图片

1.3 百度收银台接入步骤

1.3.1 集成SDK(接入百度收银台、度小满支付、支付宝支付、微信支付四个SDK)

  1. 下载并集成如下 SDK 到工程中

  2. 增加 SDK 依赖的系统库

    • 集成支付宝 SDK 需要引入系统库:libc++.tbd、libz.tbd、SystemConfiguration.framework、CoreTelephony.framework、CoreMotion.framework、CoreText.framework、CFNetwork.framework、CoreGraphics.framework 、WebKit.framework;
    • 集成度小满 SDK 需要引入系统库:AudioToolbox.framework、AVFoundation.framework、AddressBookUI.framework、AddressBook.framework、MobileCoreServices.framework。
  3. 把如下资源添加到工程中

    • (BainuoCashierSDK.bundle、BaiduWallet_Portal.bundle、AlipaySDK.bundle)

1.3.2 注册支付能力(参考BBASMPaymentImplement)

1
2
3
4
5
6
7
8
9
10
11
12
// 按需实现和注册支付能力(收银台 SDK 提供了微信、支付宝、百付宝的支付能力的默认实现)
[BDNCashierSDK registerPaymentServices:@[[BDNCashierSDKAlipayService defaultService], // 收银台SDK提供的支付宝支付能力默认实现
[BDNCashierSDKWechatService defaultService], // 收银台SDK提供的微信支付能力默认实现
[BDNCashierSDKBaifubaoService defaultService] // 收银台SDK提供的百付宝支付能力默认实现
]];

// 使用收银台提供的支付宝支付能力时,需要注册对应 Scheme,用于支付完成后回调宿主 App
[[BDNCashierSDKAlipayService defaultService] registerScheme:ALIPAY_SCHEME];

// 使用收银台提供的百付宝支付能力时,需要注册实现 BDNCashierSDKBaifubaoDelegate 协议的代理类
BBASMBainuoPayManagerDelegate *payDelegate = [BBASMBainuoPayManagerDelegate shareInstance];
[[BDNCashierSDKBaifubaoService defaultService] registerDelegate:payDelegate];

1.3.3 实现百度收银台支付接口(参考 BBASMPaymentImplement、BBASMPaymentHelper)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @brief 糯米聚合收银台新接口,支持更多信息的返回
*
* @discussion 调起聚合收银台,小程序可以配置收银台的支付渠道。
* @param params 调起参数,包含订单信息、宿主信息以及场景值等。宿主 app 不需要做额外处理,直接透传给收银台API即可
* @param bannedChannels 收银台需要屏蔽的渠道列表,宿主 app 不需要做额外处理,直接透传给收银台 API 即可
* @param detailResultCallback 支付回调,其中 payResult 需要宿主 app 通过 BDNCashierPaymentRespMsgKey 取出,data 通过 BDNCashierPaymentRespDataKey 取出后直接透传给小程序框架
* @param showPanelBlock 收银台面板展示回调,仅触发一次
* @param callPayInterfaceBlock 请求收银台支付接口回调,含请求收银台 server、及支付跳转(可能有多次)
*/
+ (void)requestBainuoPolymerPaymentWithParams:(NSDictionary *)params
bannedChannels:(nullable NSArray *)bannedChannels
detailResultCallback:(void (^)(BBASMPaymentStatus status, NSString *payResult, NSDictionary *data))detailResultCallback
showPanelBlock:(nullable void (^)(BOOL showSuccess, NSDictionary *extraInfo))showPanelBlock
callPayInterfaceBlock:(nullable void (^)(BOOL callSuccess, NSDictionary *extraInfo))callPayInterfaceBlock;

1.3.4 处理支付回调

  1. 支付宝回调处理:在宿主的 AppDelegate.m 中增加对支付宝支付完成的回调处理,将支付结果传给收银台SDK
1
2
3
4
5
6
7
8
9
10
11
- (BOOL)application:(UIApplication *)application
openURL:(nonnull NSURL *)url
options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
...
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
BOOL result = [BDNCashierSDK handleOpenURL:url];
return result;
}
return YES;
}
  1. 微信回调处理:
  • 在 info.plist 中的 URL Types ,添加回流的 URL Schemes:xxx.baidu.com(必须以 “.baidu.com” 结尾)
  • 在百度收银台支付请求时传入参数(参考 BBASMPaymentHelper):dealReq.schemeForWechatH5Pay = @"xxx.baidu.com";

图片

  1. 度小满回调处理:(实现BDNCashierSDKBaifubaoDelegate, BDWalletSDKMainManagerDelegate协议, 参考Demo中的BBASMBainuoPayManagerDelegate、BBASMWalletPaymentDelegate)。

1.4 示例

参考:BBASMPaymentImplement

1.5 备注

  • 百度收银台支付渠道不支持宿主修改,如果有渠道屏蔽要求,需要联系开源商务接口人