# 快速了解面包多Pay

### 面包多Pay 是什么

面包多Pay是一个**个人可用**的支付服务： 为个人提供安全，合规，高效，易用的支付能力。

面包多Pay是[面包多](https://mbd.pub/)旗下产品，借助[面包多闪电结算](https://mbd.pub/help/#/lightning)，能够合规安全的为个人提供支付能力。

通过独家的**无代码接入**，无需编写代码就可以灵活的使用支付能力，适用于设计师，产品经理，创意工作者。

### 面包多Pay 的来源

一直以来，受限于支付渠道规定，个人或个体都很难使用支付能力，许多优秀的独立开发者，产品经理，设计师，创意工作者，都因此而无法体面安全的出售自己的作品或产品，也无法验证市场需求或获得真实市场反馈。

面包多 <img src="https://501619651-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWEp1EJjNiURJQ_uQG2%2F-MWEqCmF7hdVLHwMAlo2%2F-MWEvnYG5J5CpTNo1Rnl%2Flogo.png?alt=media&amp;token=388a776e-0e32-4226-8f3a-6d9719549f32" alt="" data-size="line"> 作为一个数字内容平台，在 2020 年为超过 18000 名创作者提供服务，帮助他们获得了超过千万元收入，为了解决资金合规，面包多开发闪电结算方案：和 17 家银行及支付宝，微信支付合作，可以合规的为个人开通支付能力。

### 安全且合规

面包多Pay 是支付渠道及银行合作伙伴，不会在交易的任何环节触碰资金，仅仅向支付渠道发送资金处理指令，由支付渠道或银行处理资金，符合监管要求


# 使用守则

请务必认真对待

👮‍♀️ 面包多支付受朝阳区公安局网安大队监管，对于任何违反法律法规的交易，都将立即采取终止交易，关闭账号，上报有关部门等措施

禁止使用 面包多Pay 用于以下服务：

* 涉政涉军类
* 危险品/化学武器/剧毒/危害气体
* 精神类 / 麻醉类 / 有毒类 / 放射类 / 兴奋剂类 / 计生类药品
* 色情低俗
* 赌博，博彩
* 间谍器材，黑客软件危害公共安全或侵犯他人隐私的物品
* 国家保护动植物
* 未经国家备案的网络游戏、游戏点卡、货币等相关服务类商品
* 电信欺诈
* 金融类 / 非法集资 / 外汇兑换 / 数字货币交易 / P2P / 一元购
* 其它违反法律法规、社会公序良俗，支付渠道及银行有关规定的

如果你使用面包多Pay 用于以上内容或服务，我们可能会采取终止合作，取消接入，上报有关部门等方式处理，对于情节严重，造成恶劣影响的，我们保留上诉法院的权利


# 服务开通

🤝了解面包多Pay的开通条件与方式

> 首先需要明确，面包多Pay ≠ 面包多，两者都基于闪电结算和用户系统提供服务，但服务方式，费率，结算规则等都不相同，请以本文档为准

**面包多 Pay的开通没有任何费用，但都需要较为严格的审核**

* 首先，你需要在面包多注册账号
* 然后，提交「闪电认证申请」：<https://mbd.pub/o/warrant>
* 选择「仅开通闪电结算」
* 在「创作信息」中，较为具体的填写你的产品，付费计划等信息，便于审核人员判断是否合规
* 1-2天内，如果审核通过，你会收到站内通知和微信推送
* 通过后，可前往闪电结算开通页面，填写资料，并依次申请微信和支付宝渠道
* 微信和支付宝通过后，闪电结算页面展示「闪电结算已开通」，现在则可开始使用 面包多Pay 🎉

`请您理解`

我们推出面包多 Pay，最初目的是借助闪电结算能力，为独立，个体开发者提供一些便利，让他们的产品能更快得到验证，获取收入，这么做一方面是因为闪电结算能方便实现这一目的，另一个原因则是我们团队成员中有多名独立开发者，大家都有类似需求，也希望能帮助更多开发者

在面包多 Pay上线之后，我们发现宽松的审核带来了较多滥用，这甚至给我们的主要业务也带来了影响，截至目前为止，面包多Pay 给我们带来的分成收入远不足面包多的1%，却耗费了我们超过50%的审核和投诉处理成本，因此在 2022 年后，我们停止了对面包多Pay的所有宣传和推广，使其保持在较小规模，并和我们信任的开发者，C2C平台，建立更稳固深入的合作。

我们依然欢迎平台和我们进行资金合作，也依然希望能帮助优秀的开发者，但我们的标准会更加严格，我们认为这是对我们自身，对您，以及所有已经合作的开发者，更负责任的做法。


# 常见问题

你可能想知道

## 支持哪些支付方式？

微信 JSAPI 支付，微信 H5 支付，支付宝支付

## 怎么收费？

面包多Pay 一共会收取每笔支付金额的2% + 0.1元作为服务费，支付金额低于0.5元不会扣取服务费，此外没有其他费用（支付金额低于0.5元时，免服务费）

## 支付的钱如何到我这里？

* 如果用户使用支付宝支付，则支付钱款直接到你的支付宝（5分钟内）
* 如果用户使用微信支付，支付钱款将进入银行托管户，并于次日自动汇总提现至你的银行卡

## 为什么收费和闪电结算文档说明不一样？

闪电结算文档说明是面对面包多用户的，面包多是综合数字内容平台，包含了创作，销售，营销，版权保护等，因此服务费较高，但如果只是使用面包多Pay 的支付接口(包含无代码支付)，服务费则以本文档为准


# 微信 JSAPI 支付

适用于微信内网页

> 在使用 JSAPI支付之前，请先[获得用户openid](/api/huo-qu-yong-hu-openid)

#### 请求URL

* `https://newapi.mbd.pub/release/wx`

#### 请求方式

* POST
* Json

#### 请求参数

| **参数名**        | **必选** | **类型** | **说明**                                                                                                                        |
| -------------- | ------ | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| openid         | 是      | string | 用户的openid，参见[获取openid](/api/huo-qu-yong-hu-openid)                                                                            |
| app\_id        | 是      | string | 你的 app\_id，可在控制台查看                                                                                                            |
| share\_code    | 否      | string | 分账参数，需先[开通分账权限](/kai-fa-zhe-zhi-chi/ying-yong-he-zuo-fen-zhang-quan-xian#shen-qing-fen-zhang-quan-xian-de-qian-zhi-tiao-jian) |
| description    | 是      | string | 支付描述，一般为商品名称                                                                                                                  |
| amount\_total  | 是      | number | 金额，**单位为分**                                                                                                                   |
| out\_trade\_no | 否      | string | 订单号，如不填，面包多将随机生成订单号                                                                                                           |
| callback\_url  | 是      | string | 支付后跳转地址                                                                                                                       |
| sign           | 是      | string | 请求签名，参照[签名算法](/api/qian-ming-suan-fa)                                                                                         |

#### 返回示例

```
//成功
{
    "appId": "wxa8423199a021d",
    "timeStamp": "1615441885",
    "nonceStr": "ulAuiq1uxxofwSCH",
    "package": "prepay_id=wx111351262666123e13b9da0000",
    "signType": "RSA",
    "paySign": "4QaU1C1HvjBdTTgsjwP48YWC+OlHtqWOXWPGD3hEt27S3Snha7iDjwBPOSMLOueTIxi0TAaAaeZy0QU7RU065XwlNxTH9NDP9oN+mXyy+S6bgmNHKyxHyISVeo1gCZhFKCidpaj2KgUHgfyyvYcte5oeK3jtYccAyFyJ23IugvYSggxUKM6JQKIsJ9YWAWIBqL9q9FINbKl0bjOAMYC0IAmmw8whaLC7ZdFZ9wIsHE6YYuXwnDi/O6tRpIdZf/y3w=="
}

//失败
{
    "error": "error sign"
}
```

#### 返回参数说明

| **参数名** | **类型** | **说明** |
| ------- | ------ | ------ |
| error   | string | 错误说明   |
|         |        |        |

#### 备注

* 如果返回结果不包含 error，则请求成功，返回的参数直接放入html中，即可在微信内使用微信 jsapi 唤起支付
* jsapi支付的使用请参考微信官方文档
* 根据微信规则，jsapi 支付后用户会进入「小票页面」，用户点击该页面的「继续」按钮，会跳转至 `callback_url`

#### 支付Demo

> 该 demo 参考 payjs

```
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no">
    <meta name="format-detection" content="email=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <link href="https://cdn.bootcss.com/weui/1.1.2/style/weui.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/zepto/1.2.0/zepto.min.js"></script>
</head>
<body style="padding:20px;">
<a href="javascript:;" class="weui-btn weui-btn_primary" id="payBtn">微信支付</a>
</body>
<script>
    if (typeof WeixinJSBridge == "undefined") {
        if (document.addEventListener) {
            document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
        } else if (document.attachEvent) {
            document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
            document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
        }
    }
    function onBridgeReady() {
        WeixinJSBridge.call('hideOptionMenu');
    }
    $('#payBtn').on('click', function () {
        WeixinJSBridge.invoke(
                'getBrandWCPayRequest', {
                    // 以下6个支付参数由本接口获取
                    // **************************
                    "appId": "wxc5205a653b0259ac",
                    "timeStamp": "15100000000",
                    "nonceStr": "9cJEu27X6KehHGM8",
                    "package": "prepay_id=wx162234040923141245861167",
                    "signType": "MD5",
                    "paySign": "D64EF3ADBCA224E435D321619710C008"
                    // **************************
                },
                function (res) {
                    if (res.err_msg == "get_brand_wcpay_request:ok") {
                        WeixinJSBridge.call('closeWindow');
                    }
                }
        );
    });
</script>
```


# 微信 H5 支付

适用于外部手机浏览器

> 微信H5 支付使用前，请在控制台添加H5域名并确保审核通过

> H5 支付是指手机自带浏览器跳转至微信客户端支付的方式

#### 请求URL

* `https://newapi.mbd.pub/release/wx/prepay`

#### 请求方式

* POST
* Json

#### 请求参数

| **参数名**        | **必选** | **类型** | **说明**                                                                                                                        |
| -------------- | ------ | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| channel        | 是      | string | 固定为 h5                                                                                                                        |
| app\_id        | 是      | string | 你的 app\_id，可在控制台查看                                                                                                            |
| share\_code    | 否      | string | 分账参数，需[先开通分账权限](/kai-fa-zhe-zhi-chi/ying-yong-he-zuo-fen-zhang-quan-xian#shen-qing-fen-zhang-quan-xian-de-qian-zhi-tiao-jian) |
| description    | 是      | string | 支付描述，一般为商品名称                                                                                                                  |
| out\_trade\_no | 否      | string | 订单号，如不填，面包多将随机生成订单号                                                                                                           |
| amount\_total  | 是      | number | 金额，**单位为分**                                                                                                                   |
| sign           | 是      | string | 请求签名，参照[签名算法](/api/qian-ming-suan-fa)                                                                                         |

#### 返回示例

```
//成功
{
    "h5_url": "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx120013350995d44tfg4trab07f0000&package=12453942569"
}

//失败
{
    "error": "error sign"
}
```

#### 返回参数说明

| **参数名** | **类型** | **说明** |
| ------- | ------ | ------ |
| error   | string | 错误说明   |
|         |        |        |

#### 备注

* 如果返回结果不包含 error，则请求成功，返回的h5\_url 以链接点击形式跳转，即可在微信外的网页中 唤起微信进行H5支付
* H5支付的使用请参考微信官方文档
* 不需要传递 `callback_url`，因为支付完成后会自动返回并刷新原网页（请做好判断）


# 支付宝支付

适用于移动端网页

#### 请求URL

* `https://newapi.mbd.pub/release/alipay/pay`

#### 请求方式

* POST
* Json

#### 请求参数

| **参数名**        | **必选** | **类型** | **说明**                                                                                                                        |
| -------------- | ------ | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| url            | 是      | string | 支付后跳转的URL地址                                                                                                                   |
| app\_id        | 是      | string | 你的 app\_id，可在控制台查看                                                                                                            |
| share\_code    | 否      | string | 分账参数，需[先开通分账权限](/kai-fa-zhe-zhi-chi/ying-yong-he-zuo-fen-zhang-quan-xian#shen-qing-fen-zhang-quan-xian-de-qian-zhi-tiao-jian) |
| description    | 是      | string | 支付描述，一般为商品名称                                                                                                                  |
| amount\_total  | 是      | number | 金额，**单位为分**                                                                                                                   |
| out\_trade\_no | 否      | string | 订单号，如不填，面包多将随机生成订单号                                                                                                           |
| callback\_url  | 否      | string | 支付后跳转地址，如不填会只显示「支付成功」                                                                                                         |
| sign           | 是      | string | 请求签名，参照[签名算法](/api/qian-ming-suan-fa)                                                                                         |

#### 返回示例

```
//成功
{
    "body": "<form id='alipaysubmit' name='alipaysubmit' action='https://openapi.alipay.com/gateway.do?charset=UTF-8' method='POST'><input type='hidden' name='method' value='alipay.trade.wap.pay'/><input type='hidden' name='app_id' value='2021015212301193689006'/><input type='hidden' name='timestamp' value='2021-03-11 23:08:09'/><input type='hidden' name='format' value='json'/><input type='hidden' name='version' value='1.0'/><input type='hidden' name='alipay_sdk' value='alipay-easysdk-php-2.0.0'/><input type='hidden' name='charset' value='UTF-8'/><input type='hidden' name='sign_type' value='RSA2'/><input type='hidden' name='app_cert_sn' value='d6558a25f540df44efaa5fa7920b6f0e'/><input type='hidden' name='alipay_root_cert_sn' value='687b59193f3f462dd5336e5abf83c5d8_02941eef3asd424234d3b83462e1dfcf6'/><input type='hidden' name='biz_content' value='{\"subject\":null,\"sub_merchant\":{\"merchant_id\":null},\"settle_info\":{\"settle_detail_infos\":[{\"amount\":10,\"trans_in_type\":\"loginName\",\"trans_in\":\"XXXXX@gmail.com\"}]},\"out_trade_no\":\"fe79d8e4faa0e184f721de6e1f919f43\",\"total_amount\":10,\"quit_url\":\"https%3A%2F%2Fm.niucodata.com%2Fbox_pay%2Fmbd_payok.php%3Fres%3Dfail\",\"product_code\":\"QUICK_WAP_WAY\"}'/><input type='hidden' name='return_url' value='https%3A%2F%2Fm.niucodata.com%2Fbox_pay%2Fmbd_payok.php'/><input type='hidden' name='notify_url' value='https://api.mianbaoduo.com/release/alipay/notify'/><input type='hidden' name='sign' value='J5+svHVpVWwhmBUC2yzC4nF0cMi+OuGJKTfvdFBEiwkZOoiulTxUV7dgs4pTjGdL1DJ0qeU0xm82+3tXyvDuYapl2tzGmN1QfEB6Pp/aHeY3EVDkz1pF6zoh/iVb9bgLi/imSd95hbqvIyDAwFYsMMHl4b32wPyQMoYy9DTy/zIdpkNb4/I3bMaBwV1tniOldcxdzIkoV7z2CtQfp3eDI4z4KpGb239eIFPMDG2MDe+nj9Fr+I5PJMciKP1l8lfSlM65a4YAoXFmEjwqz3M6MFCxHWPT1lCmZ0EDA/0TWsXvwrrEo0579QOjhkqT6EpvJboDZsb1Ejg1sYslrJBS1Q=='/><input type='submit' value='ok' style='display:none;''></form><script>document.forms['alipaysubmit'].submit();</script>"
}

//失败
{
    "error": "error sign"
}
```

#### 返回参数说明

| **参数名** | **类型** | **说明** |
| ------- | ------ | ------ |
| error   | string | 错误说明   |
|         |        |        |

#### 备注

* 如果返回结果不包含 error，则请求成功，返回的body直接前端展示，即可自动唤起支付宝进行支付
* 支付宝支付的使用请参考支付宝官方文档
* 如需要在PC上使用，请先制作移动端支付页面，然后引导用户扫码到支付页面进行支付


# Webhook 异步通知

开发核心

在 `控制台` 设置好 `webhook URL` 后，面包多会在以下情况下向该 `URL` 发送请求：

* 订单支付成功
* 有订单被投诉

接收 Webhook 通知的 URL 必须可直接访问，不能携带参数，或其他验证，否则可能会导致请求无法正常完成

> 请注意  ：webhook 的请求方式为 Post Json，不是 form 形式

**请求参数**

|      |        |                                                 |
| ---- | ------ | ----------------------------------------------- |
| 参数名  | 类型     | 说明                                              |
| type | string | 通知类型，支付成功为 `charge_succeeded`，订单投诉为 `complaint` |
| data | object | 数据包                                             |

当 `type` 为 `charge_succeeded` 时，`data` 结构如下：

|                |        |                        |
| -------------- | ------ | ---------------------- |
| 参数名            | 类型     | 说明                     |
| description    | string | 商品描述                   |
| out\_trade\_no | string | 订单号                    |
| amount         | int    | 金额，单位为分                |
| openid         | string | 支付者 openid (仅微信支付)     |
| charge\_id     | string | 支付渠道流水号                |
| payway         | int    | 支付渠道，微信支付为 1 ，支付宝支付为 2 |

当 `type` 为 `complaint` 时，`data` 结构如下：

|                   |        |           |
| ----------------- | ------ | --------- |
| 参数名               | 类型     | 说明        |
| out\_trade\_no    | string | 订单号       |
| complaint\_detail | string | 投诉详情      |
| amount            | int    | 订单金额，单位为分 |
| payer\_phone      | string | 投诉者电话     |

⚠️ 注意

* 异步通知以 `post json` 方式发送
* 为保障推送到达率，系统可能多次进行通知推送，请做好去重逻辑


# 退款

除调用 API 外，也可以直接在控制台退款

#### 请求URL

* `https://api.niucodata.com/release/main/refund`

#### 请求方式

* POST
* Json

#### 请求参数

| **参数名**   | **必选** | **类型** | **说明**                                |
| --------- | ------ | ------ | ------------------------------------- |
| order\_id | 是      | string | 订单号                                   |
| app\_id   | 是      | string | 你的 app\_id，可在控制台查看                    |
| sign      | 是      | string | 请求签名，参照[签名算法](/api/qian-ming-suan-fa) |

#### 返回示例

```
//成功
{
    "code": 200,
    "info": "refund success"
}

//失败
{
    "error": "该订单已退款"
}
```

#### 返回参数说明

| **参数名** | **类型** | **说明**    |
| ------- | ------ | --------- |
| code    | int    | 200 为退款成功 |
| info    | string | -         |

#### 备注

* 如果返回结果不包含 error，则退款成功，否则见 error 信息

> 提示：确保账户余额大于退款金额，才可以退款成功


# 订单查询

除调用 API 外，也可以直接在 控制台 查询订单

#### 请求URL

* `https://newapi.mbd.pub/release/main/search_order`

#### 请求方式

* POST
* Json

#### 请求参数

| **参数名**        | **必选** | **类型** | **说明**                                |
| -------------- | ------ | ------ | ------------------------------------- |
| out\_trade\_no | 是      | string | 订单号（也支持微信/支付宝流水号）                     |
| app\_id        | 是      | string | 你的 app\_id，可在控制台查看                    |
| sign           | 是      | string | 请求签名，参照[签名算法](/api/qian-ming-suan-fa) |

#### 返回示例

```
//成功
{
  "order_id": "36b4272290745783269904952a40d6d1",
  "charge_id": "4002110000491201231021102123",
  "description": "突字幕高级版",
  "share_id": null,
  "share_state": "0",
  "amount": "12900",
  "state": "1",
  "create_time": "1615479215",
  "payway": "1",
  "refund_state": "0",
  "refund_amount": "0"
  
}

//失败
{
    "error": "找不到该订单"
}
```

#### 返回参数说明

| **参数名**        | **类型** | **说明**                                                  |
| -------------- | ------ | ------------------------------------------------------- |
| order\_id      | string | 订单号                                                     |
| charge\_id     | string | 支付渠道流水号                                                 |
| description    | string | 商品描述                                                    |
| share\_id      | string | 结算ID                                                    |
| share\_state   | int    | 结算状态                                                    |
| amount         | int    | 支付金额，单位为分                                               |
| state          | int    | 支付状态，0-未支付，1-已支付，2-已结算，3-投诉中，4-投诉完结，5-投诉超时，6-投诉中(买家处理中) |
| create\_time   | int    | 支付时间（时间戳）                                               |
| payway         | int    | 支付渠道，1为微信支付，2为支付宝                                       |
| refund\_state  | int    | 退款状态，0为无退款，1为部分退款，2为全部退款                                |
| refund\_amount | int    | 已退款金额，单位为分                                              |
| plusinfo       | string | 附加参数（json格式）                                            |

#### 备注

* 此接口用于订单的辅助查询，请勿直接使用此接口做订单状态的高频轮询，调用频率过高可能会导致IP进入黑名单
* 正确的业务逻辑：通过接收异步通知后更新自己订单状态，用户前端轮询应放在商户侧订单状态


# 获取用户 openid

微信 JSAPI 支付必须

#### &#x20;请求URL

* `https://p.mbd.pub/openid`

#### 请求方式

* GET

#### 请求参数

| **参数名**     | **必选** | **类型** | **说明**                                  |
| ----------- | ------ | ------ | --------------------------------------- |
| target\_url | 是      | string | 自动跳转地址，例如 <https://example.com?pid=123> |
| app\_id     | 是      | string | 你的app\_id                               |

假如需要接收 `openid` 的 url 是：

`http://www.example.com/abc?uid=32`

则直接通过浏览器跳转该 `url` 即可：

`https://p.mbd.pub/openid?app_id=1234567890&target_url=http://www.example.com/abc?uid=32`

完成 `openid` 获取后，微信浏览器会自动跳转至：

`http://www.example.com/abc?uid=32&openid=*************`


# 签名算法

在调用 API 时，每个请求都应加入签名字段，以保证安全，未带签名或签名不正确，面包多将返回错误

&#x20;签名生成的通用步骤如下：

* 设所有发送或者接收到的数据为集合M，将集合M内非空参数值的参数按照参数名ASCII码从小到大排序（字典序），使用URL键值对的格式（即key1=value1\&key2=value2…）拼接成字符串stringA。
* 在stringA最后拼接上\&key={{app\_key}}得到stringSignTemp字符串，并对stringSignTemp进行MD5运算，得到sign值

特别注意以下重要规则：

* 参数名 ASCII 码从小到大排序（字典序）
* 参数名区分大小写

#### Demo

例如传递的参数如下：

```
app_id: 12345
amount_total: 1
out_trade_no: 123123123123

```

* 第一步：对参数按照key=value的格式，并按照参数名ASCII字典序排序如下

> app\_id=12345\&out\_trade\_no=123123123123\&amount\_total=1

* 第二步：对上一步中的字符串拼接\&key=密钥

> app\_id=12345\&out\_trade\_no=123123123123\&amount\_total=1\&key=xxxxxxxxx

* 第三步：对上一步中字符串取MD5值

> $sign = md5('app\_id=12345\&out\_trade\_no=123123123123\&amount\_total=1\&key=xxxxxxxxx');

#### 代码示例

php

```
// 签名方法
function sign(array $data, $key) {
    ksort($data);
    $sign = md5(urldecode(http_build_query($data)).'&key='.$key);
    return $sign;
}

// 用法示例
$data = [
    'app_id' => '12345',
    'amount_total' => 1,
    'out_trade_no' => '123123123123',
];

// 面包多支付 app_key
$key = 'xxxxxxxxxxx';

$sign = sign($data, $key);
```

python

```
# !/usr/bin/env Python3
# -*- coding: utf-8 -*-

import hashlib
from urllib.parse import urlencode,unquote
'''
签名算法
'''
# 签名算法
def sign(attributes, payjs_key):
    attributes_new = {k: attributes[k] for k in sorted(attributes.keys())}
    sign_str = "&".join(
        [f"{key}={attributes_new[key]}" for key in attributes_new.keys()]
    )
    return (
        hashlib.md5((sign_str + "&key=" + payjs_key).encode(encoding="utf-8"))
        .hexdigest()
    )

# 用法示例
data = {
    'app_id' : '12345',
    'amount_total' : 1,
    'out_trade_no' : '123123123123'
}

# 面包多支付 app_key
key = 'xxxxxxxxxxx'

sign = sign(data, key)
```

> 本文档参考 payjs 文档


# IP 白名单

面包多会通过以下`IP地址`向你设置的`webhook url` 发送请求，如有白名单过滤，请将下列`IP地址`全部添加到白名单之中：

* 49.233.5.148
* 140.143.158.124

> 更新于：2021.3.20


# JSAPI 支付后文案

仅限微信 JSAPI 支付

根据微信支付规定，使用 JSAPI 支付后，默认展示「商家小票」，**不支持自动跳转，**&#x53EA;能由用户点击按钮后才可进行跳转

在 「开发设置」 - 「JSAPI 支付后文案」中，你可以设置用户使用微信 JSAPI 支付后，商家小票的文案，该文案将影响用户点击按钮跳转的转化率

![](https://501619651-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWEp1EJjNiURJQ_uQG2%2F-MWcHbQHnVgnhkJu-ZEa%2F-MWcMZvyzhDrJNlKAmd5%2Fimage.png?alt=media\&token=db42bc5f-3611-4cfa-ba79-6b7097b38c1c)

* 默认的按钮文字为「继续」
* 默认的按钮描述为「由面包多™️⚡️闪电结算提供服务，你的付款金额将直接实时结算至创作者 (扫码支付场景可直接关闭此页面)」

你可以通过设置页面，设置按钮的文字和按钮上方的描述，以增加用户点击按钮的几率

![](https://501619651-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWEp1EJjNiURJQ_uQG2%2F-MWcHbQHnVgnhkJu-ZEa%2F-MWcNOXJtSjs1OCQzj5h%2Fimage.png?alt=media\&token=f111cb39-d68a-4d87-9305-3a599aa92f03)

在微信 JSAPI 支付场景下，即便传入了 `callback_url`，也需要用户主动点击此页面的按钮才能跳转至 `callback_url`


# 无代码接入

面包多Pay提供无代码接入能力，无需编写代码就可以灵活的使用支付能力

> 无代码接入未做任何用户验证/权限校验/信息记录，仅作为 MVP 测试使用，请勿用于商业正式产品

> 无代码接入由面包多监管和审核，请遵守使用规范，如果支付场景中有违规，面包多可能会关闭该场景，甚至暂停你的支付权限

无代码接入的核心逻辑非常简单：根据你的设置，在支付后运行特定逻辑，目前支持的逻辑包括：

* 展示特定文字
* 展示随机文字
* 展示图片
* 跳转指定网页

无需操心支付参数的构造，回调的处理，并发控制，只需将支付场景链接嵌入你的内容之中即可使用支付能力

#### 接收更多参数

场景链接一般形式为： `https://p.mbd.pub/nocode_pay?id=62cdb07a114c7ea86db45379631fc7f9`

如果需要接收更多参数，可以自行构造URL，例如：`https://p.mbd.pub/nocode_pay?id=62cdb07a114c7ea86db45379631fc7f9&a=123&b=456`

增加的参数（`a=123&b=456`）面包多也会记录，并在 [查询订单接口](https://www.wolai.com/8FVrYChC5MT46Nj1Sziqj6) 和控制台中返回：

![](https://501619651-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWEp1EJjNiURJQ_uQG2%2F-MWEqCmF7hdVLHwMAlo2%2F-MWHrkDIBXUI4i2EzEs-%2Fimage.png?alt=media\&token=75440840-f19b-4680-be58-dc9402a90369)

> 点击订单即可查看支付详情及支付时携带的参数


# 推介计划

合作共赢

由你引荐的新注册用户，使用面包多Pay 收款达 100 元，你即可获得 5 元奖励

* 邀请一个用户仅能获得一次奖励
* 邀请用户个数无限制
* 使用面包多Pay 收款指正常的交易场景下，不能伪造虚假交易场景

奖励金额每月1日发放

奖励金额将通过支付宝转账直接转入你的支付宝余额


# (解决二清)独立托管方案

解决二清问题，合规构建平台

面包多Pay 基于面包多闪电结算，通过和银行，支付渠道签约合作，构建直连支付和收款方的交易渠道，并可以通过交易指令使用控制账期，划转分账等能力，完美满足税务，银行监管需求，同时聚合接口，统一交易体系，构建简单快速的API，极大降低开发门槛

现面包多Pay 推出 2 种托管方案

### 中小型平台

使用面包多Pay作为合作提供商，面包多Pay将提供资质与接口，由平台自由灵活构建自己的商业模式，支持收款用户管理，分账控制，账期管理，无资质要求

合作价格：3 万/年 + 0.8% 分成

### 大型平台

面包多Pay 代申请合作资质，提供全套产品，代码，运维，咨询服务

需满足条件：

* 注册资本 100 万以上
* 公司参与社保人数 5 人以上，缴纳时间超过 1 年
* 公司无行政处罚或正在进行的法律诉讼程序
* 有ICP备案网站

合作价格：10万 + 3万/年

合作联系：<dk@niucodata.com>


# 自定义结算时间

如果你希望每笔交易能够晚点结算

通常来说，交易完成后，面包多Pay 将尽快完成交易结算，结算意味着：

* 对于微信：钱款进入托管户，托管户每日自动发起提现，提到银行卡
* 对于支付宝：你的个人支付宝余额中到账这笔收入

未被结算的资金由银行统一托管，在调用退款接口时，会直接退还给用户

在某些情况下，开发者可能希望指定结算的时间，从而避免在退款时可退款余额不足的风险，也能给付款用户带来更好的保障，这可以通过**自定义结算时间参数**来实现

在发起支付请求时，额外附带 `settle_time` 参数，其值为期望结算时间的 `unix时间戳(秒)`

> settle\_time 参数依然参加签名


# 开发者激励计划🔥

&#x20;为了让面包多Pay更简单易用，我们对所有为面包多Pay添砖加瓦的开发者准备了一些激励，除了激励之外，我们也真诚的感谢你的付出🙇

> 如果你完成了某项开发，请与我们联系

{% tabs %}
{% tab title="邮件联系" %}
`dk@niucodata.com`
{% endtab %}

{% tab title="微信联系" %}
![](https://501619651-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWEp1EJjNiURJQ_uQG2%2F-MWOLufjrSxFA-VOW8t_%2F-MWONtN94SZQgdR4-wGS%2FWechatIMG2108.jpeg?alt=media\&token=d09bfb1b-5c10-4fc5-81c4-79dd63f00052)
{% endtab %}
{% endtabs %}

### 语言 SDK 开发

如果你率先为面包多Pay 开发某种语言或环境的 SDK，并可正常运行，没有明显安全问题，那么我们将为你提供 **100 元人民币**的激励

| 语言       | 开发状态   | 开发者       | 地址                                        |
| -------- | ------ | --------- | ----------------------------------------- |
| `PHP`    | `已完成`  | 白宦成       | <https://github.com/bestony/mbdpay>       |
| `Python` | `已完成`  | shaweb    | <https://github.com/shaoxyz/mbd_pay>      |
| `JS`     | 已完成    | chunshand | <https://github.com/chunshand/mbdpay>     |
| `Go`     | `已完成`  | datewu    | <https://github.com/datewu/mbdpay>        |
| `Ruby`   | `等待开发` |           |                                           |
| `JAVA`   | `已完成`  | actar233  | <https://github.com/actar233/mbdpay-java> |
| `更多`     | `等待开发` |           |                                           |

> 以上 SDK 为开发者提供，使用前请注意风险

### 应用场景/插件开发

如果你基于面包多Pay 开发并开源了某个应用场景/插件（例如Wordpress插件，Discuz插件等），可正常运行，没有明显安全问题，那么我们将为你提供 **200 元人民币**的激励（限20个）

### 独立平台级产品合作

如果你基于面包多Pay 开发了自己的产品，但并不打算开源，希望构建自己的商业模式，不妨尝试申请开通分账权限，安全合规的获得分成收入：

{% content-ref url="/pages/-MWHrxEjCtGloywlioD6" %}
[应用合作&分账权限](/kai-fa-zhe-zhi-chi/ying-yong-he-zuo-fen-zhang-quan-xian)
{% endcontent-ref %}


# 应用合作&分账权限

如果你是一名开发者，为面包多Pay 开发第三方应用，帮助其他用户更好的使用支付能力，那么，你可以**申请开通分账权限**

获得分账权限后，你可以在**调用支付接口时加入分账参数**`share_code`，则用户完成支付后，你会直接获得相应的分账金额。

例如，你基于面包多Pay 开发了Wordpress 插件，可以让所有 Wordpress 用户直接出售文章，那么，你可以通过分账权限参与所有安装该插件的用户交易的分成。

####

#### 申请分账权限的前置条件

* 有已经开发的产品，包括但不限于建站工具，插件，网站，App等
* 不涉及任何违规或内容风险
* 使用面包多Pay 作为核心交易通道
* 你已开通面包多闪电结算

####

#### 使用分账权限应遵守的规定

* 需明确告知用户分账条件并确保得到用户同意
* 监管内容合规，不为违规违法内容提供产品服务

如违反面包多Pay的相关规定或故意隐瞒，伪造交易场景，可能会受到关停分账权限或关停支付权限的处罚

合作联系：<dk@niucodata.com>


