面包多Pay
  • 快速了解面包多Pay
  • 使用守则
  • 服务开通
  • 常见问题
  • API
    • 微信 JSAPI 支付
    • 微信 H5 支付
    • 支付宝支付
    • Webhook 异步通知
    • 退款
    • 订单查询
    • 获取用户 openid
    • 签名算法
    • IP 白名单
  • 了解更多
    • JSAPI 支付后文案
    • 无代码接入
    • 推介计划
    • (解决二清)独立托管方案
  • 开发者支持
    • 自定义结算时间
    • 开发者激励计划🔥
    • 应用合作&分账权限
由 GitBook 提供支持
在本页

这有帮助吗?

  1. API

签名算法

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

签名生成的通用步骤如下:

  • 设所有发送或者接收到的数据为集合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 文档

上一页获取用户 openid下一页IP 白名单

最后更新于1年前

这有帮助吗?