全部产品
云市场

唤起支付

更新时间:2019-09-09 15:11:50

my.tradePay

发起支付。mPaaS 不提供支付的实现,如果您仍需使用此 API 进行支付,可扩展此 API 并与自己的支付系统对接。

入参

名称 类型 必填 描述
tradeNO String 条件 此参数为交易号
success Function 调用成功的回调函数
fail Function 调用失败的回调函数
complete Function 调用结束的回调函数(调用成功、失败都会执行)

success 返回值

名称 类型 描述
resultCode String 支付结果状态码,详见下表

resultCode 支付状态码说明

resultCode 描述
9000 订单支付成功
8000 正在处理中
4000 订单支付失败
6001 用户中途取消
6002 网络连接出错
6004 支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
99 用户点击忘记密码导致支付界面退出(仅 iOS)

代码示例

  1. my.tradePay({
  2. tradeNO: '201711152100110410533667792',
  3. success: (res) => {
  4. my.alert({
  5. content: JSON.stringify(res),
  6. });
  7. },
  8. fail: (res) => {
  9. my.alert({
  10. content: JSON.stringify(res),
  11. });
  12. }
  13. });

扩展说明

Android

您需要完成以下几步来扩展 API:

  1. 实现自定义 H5Plugin,需要拦截 tradePay 事件来处理用户授权。
  2. 入参处理:小程序 API 的 tradeNO 参数在客户端中将被映射为 orderStr 参数。
  3. 出参处理:客户端返回给小程序返回的结果按照 API 说明中的出参进行处理。
  4. 注册自定义 H5Plugin。

自定义 H5Plugin 代码示例(不包含注册):

  1. package com.mpaas.demo.nebula;
  2. import android.text.TextUtils;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alipay.mobile.antui.dialog.AUNoticeDialog;
  5. import com.alipay.mobile.h5container.api.H5BridgeContext;
  6. import com.alipay.mobile.h5container.api.H5Event;
  7. import com.alipay.mobile.h5container.api.H5EventFilter;
  8. import com.alipay.mobile.h5container.api.H5SimplePlugin;
  9. public class H5TradePayPlugin extends H5SimplePlugin {
  10. private static final String TRADE_PAY = "tradePay";
  11. @Override
  12. public void onPrepare(H5EventFilter filter) {
  13. super.onPrepare(filter);
  14. filter.addAction(TRADE_PAY);
  15. }
  16. @Override
  17. public boolean interceptEvent(H5Event event, final H5BridgeContext context) {
  18. if (TRADE_PAY.equals(event.getAction())) {
  19. JSONObject param = event.getParam();
  20. String tradeNO = param.getString("orderStr");
  21. if (!TextUtils.isEmpty(tradeNO)) {
  22. AUNoticeDialog dialog = new AUNoticeDialog(event.getActivity(), "发起支付", "确认支付" + tradeNO + "?", "支付", "不支付");
  23. dialog.setPositiveListener(new AUNoticeDialog.OnClickPositiveListener() {
  24. @Override
  25. public void onClick() {
  26. JSONObject result = new JSONObject();
  27. result.put("resultCode", 9000);
  28. context.sendBridgeResult(result);
  29. }
  30. });
  31. dialog.setNegativeListener(new AUNoticeDialog.OnClickNegativeListener() {
  32. @Override
  33. public void onClick() {
  34. JSONObject result = new JSONObject();
  35. result.put("resultCode", 6001);
  36. context.sendBridgeResult(result);
  37. }
  38. });
  39. dialog.show();
  40. } else {
  41. context.sendError(event, H5Event.Error.INVALID_PARAM);
  42. }
  43. return true;
  44. }
  45. return false;
  46. }
  47. }

iOS

参考 自定义 JSAPI > Plist 注册 > 注册 JSAPI 配置新的 JSAPI。

您需要完成以下几步来扩展 API:

  1. 开发者实现 getAuthCode 对应的 JSAPI 实现类 JsApiHandlerSample
  2. 入参处理:小程序 API 传入的参数皆通过 data 对象发送给 JsApiHandlerSample 的回调方法,小程序 API 的 tradeNO 参数在客户端中将被映射为 orderStr 参数。
  3. 出参处理:客户端返回给小程序返回的结果按照 API 说明中的出参进行处理。
  4. 注册自定义 JSAPI。
  5. 当向小程序返回正确的值时,请调用回调函数中 callback,具体返回值字段参见 success 返回值
  6. 当出现错误,需向小程序返回错误的值时,需调用回调函数中 callback 返回失败结果。

自定义 JSAPI 代码示例(不包含注册):

  1. #import "JsApiHandlerSample.h"
  2. #import <UIKit/UIKit.h>
  3. @interface JsApiHandlerSample()<UIAlertViewDelegate>
  4. @property (nonatomic, strong) NSString *result;
  5. @end
  6. @implementation JsApiHandlerSample
  7. - (void)handler:(NSDictionary *)data context:(PSDContext *)context callback:(PSDJsApiResponseCallbackBlock)callback
  8. {
  9. [super handler:data context:context callback:callback];
  10. NSString *tradeNO = data[@"orderStr"];
  11. if (tradeNO) {
  12. UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"发起支付" message:[NSString stringWithFormat:@"确认支付 %@ ?", tradeNO] delegate:self cancelButtonTitle:@"不支付" otherButtonTitles:@"支付", nil];
  13. [alertView show];
  14. if (self.result && [self.result isKindOfClass:[NSString class]]) {
  15. callback(@{@"resultCode": 9000});
  16. } else {
  17. callback(@{@"resultCode": 6001});
  18. }
  19. } else {
  20. callback(@{@"error": @(2), @"errorMessage":@"参数无效"});
  21. }
  22. }
  23. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
  24. {
  25. if (0 == buttonIndex) {
  26. self.result = @"xxx";
  27. } else {
  28. self.result = nil;
  29. }
  30. }
  31. @end