# 一、B2b插件-支付组件

# 1. B2b 支付组件

基础库 3.0.2 开始支持,低版本需做兼容处理

B2b 门店助手插件提供了 B2b 渠道支付组件,组件支持选择微信支付和银行转账支付两种支付方式,其中银行转账支付方式是对订单金额为 5w 元以上的订单的支付能力的补充

要求版本:2.0.0 以上

# 1.1 申请添加插件

插件添加方式见:申请添加插件

# 1.2 配置插件

插件配置见:配置插件

# 1.3 使用插件

在需要使用 B2b 支付组件的页面的 index.json 引入插件:

{
  "usingComponents": {
    "pay-table": "plugin://自定义组件名/pay-table"
  }
}

# 1.4 组件样式属性

B2b 支付组件支持有限度的通过指定属性进行样式自定义:


默认组件样式:
B2b支付组件默认样式
自定义组件样式:
B2b支付组件默认样式
属性 类型 必填 说明
payTableStyles Object 控制支付组件基本样式
payItemStyles Object 控制支付选择框的基本样式
payButtonContainerStyles Object 控制支付按钮容器的基本样式
payButtonStyles Object 控制支付按钮的基本样式
checkedColor String checkbox 的颜色,如 #fff
payButtonText String 控制支付按钮的文案

支持编辑的样式字段:

字段 类型
padding String
margin String
border String
width String
height String
color String
background String
border-bottom String
border-top String
border-right String
border-left String
border-radius String

# 1.5 组件关键属性

属性 类型 默认值 必填 说明
checkValue string 控制当前选中的checkBox(支付方式)
redirectInfo Object 重定向信息:android系统下银行app回跳微信后,返回指定的商家小程序页面。(android系统下从app返回微信后,无法原路返回商家小程序,因此需要 指定返回的商家小程序页面)
结构属性 类型 默认值 必填 说明
mp_path string 银行转账支付完成后回跳小程序路径,路径和参数内容由开发者设置
mp_appid string 银行转账支付完成后回跳的小程序appid
mp_version string 银行转账支付完成后回跳的小程序的版本,支持develop、trial、release
payData Object B2b微信支付请求参数,与wx.requestCommonPayment参数一致
结构属性 类型 默认值 必填 说明
signData string 具体支付参数见signData, 该参数需以string形式传递, 例如signData: '{"mchid":"1234567890","out_trade_no":"test1244","description":"测试测试","amount":{"order_amount":1,"currency":"CNY"},"attach":"test_attach","env":1}'
结构属性 类型 默认值 必填 说明
mchid string 由微信支付生成并下发的商户号。示例值:1230000109
out_trade_no string 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一,长度限制为[6,32]。示例值:1217752501201407033233368018
description string 商品描述。示例值:Image形象店-深圳腾大-QQ公仔
amount Object 订单金额信息。
结构属性 类型 默认值 必填 说明
product_amount number 订单所有商品的原价总和,单位为分。示例值:1000
freight number 订单运费,单位为分。示例值:200
discount number 订单总计优惠金额,单位为分。示例值:500
other_fee number 订单其他费用总金额,单位为分。示例值:600
order_amount number 订单总需支付金额,也即是真正下单总金额,单位为分。示例值:1300
currency string 货币类型。示例值:CNY
合法值 说明
CNY 人民币
attach string 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用,实际情况下只有支付完成状态才会返回该字段。示例值:test_attach
product_info Object 订单详细商品信息列表。
结构属性 类型 默认值 必填 说明
spu_id string 商户系统内该商品的spuid。示例值:spu123456
sku_id string 商户系统内该商品的skuid。示例值:sku123
title string 商品标题。示例值:QQ长鹅
path string 商户商品详请页小程序路径。示例值:pages/index
head_img string 商品主图的url,大小建议64*64。示例值:https://mp.weixin.qq.com/123
category string 商户侧该商品所属的类目。示例值:玩偶
sku_attr string 商户系统内该商品的sku属性。示例值:50cm
org_price number 该商品原价,单位为分。示例值:5000
sale_price number 该商品售价,单位为分。示例值:4000
quantity number 用户购买该商品的数量。示例值:5
delivery_type number 配送方式。示例值:2
合法值 说明
1 同城配送
2 快递配送
3 门店自提
4 无需配送与提货
env number 下单环境。示例值:0
合法值 说明
0 生产环境/现网环境
1 沙箱环境/测试环境
paySig string 支付签名, 详见《签名详解》
signature string 用户态签名, 详见《签名详解》
noUseB2BWechatPay boolean 是否使用B2b微信支付,可用于区别走B2b微信支付和普通微信支付,如果这个值为true,那么选择微信支付并且确认时,不会调用支付能力,但会触发confirmPay事件

# 1.6 组件事件

属性 类型 必填 说明
bindcheckChange eventhandle checkbox 的值改变后的回调,可以和 checkValue 属性配合实现双向绑定的效果
bindconfirmPay eventhandle 支付按钮点击的回调
bindpaySuccess eventhandle B2b 微信支付成功的回调, 由于银行转账支付需要跳转银行 app,因此不会触发这个事件
bindpayFail eventhandle B2b 微信支付和银行转账支付失败的回调,使用微信支付时,错误信息可参考 wx.requestCommonPayment
bindinvalidLibVersion eventhandle 使用 B2b 微信支付基础库版本不兼容时触发

# 1.7 组件 slot

属性 类型 必填 说明
morePayChannel Slot 可以自定义支付渠道

通过使用 name="morePayChannel" 的 slot,可以自定义支付渠道,示例如下:

B2b支付组件默认样式
<view>
  <pay-table
    id="payTable"
    checkValue="{{checkValue}}"
    payButtonText="{{payButtonText}}"
    bindcheckChange="handleCheckChange"
    bindconfirmPay="handleConfirmPay"
    payData="payData"
  >
    <view slot="morePayChannel">
      <radio-group bindchange="hanldeRadioChange">
        <view class="pay-item">
          <view>
            <view>
              <view class="pay-channel-name">余额支付</view>
            </view>
          </view>
          <radio value="BALANCEPAY" checked="{{checkValue === 'BALANCEPAY'}}" />
        </view>
      </radio-group>
    </view>
  </pay-table>
</view>
// @ts-ignore
const plugin = requirePlugin("自定义组件名");

const buttonText = {
  WEIQIPAY: "腾讯银行转账",
  BALANCEPAY: "余额支付",
  WECHATPAY: "微信支付",
};

Page({
  data: {
    checkValue: "",
    payButtonText: "",
    payData: {},
  },

  handleCheckChange(e) {
    console.log("handleCheckChange", e);
    this.setData({
      checkValue: e.detail,
      payButtonText: `${buttonText[e.detail]} ¥500`,
    });
  },

  handleConfirmPay(e) {
    console.log("handleConfirmPay", e);
  },

  hanldeRadioChange(e) {
    this.setData({
      checkValue: e.detail.value,
    });
  },
});