根据文档中说的:
构造待签名串
在运用具体的签名算法前,商户需要先构造待签名串。
第一步,获取 HTTP 请求的方法(GET,POST,PUT 等)
POST
第二步,获取请求的 URL,并去除域名的部分,如果链接带参数,参数值必须进行 URLencode。示例请求的 URL 为
/hk/v3/transactions/micropay
第三步,获取发起请求时的系统当前时间戳,即格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒(北 京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总秒数,作为请求时间戳。时间戳必须是最新的, 如果时间戳比微信支付服务器时间晚 300 秒,微信支付服务器会不认这个请求并报错,请商户保持自身系 统的时间准确。
1507709906
第四步,生成一个请求随机串,算法可开发者自定义(可调用系统随机数生成函数转化成字符串),建议长度不少于 10 位。
kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
第五步,获取提交数据
{
"appid": "wx2421b1c4370ec43b",
"transaction_id": "1008450740201411110005820873",
"out_trade_no": "1415757673"
}
第六步,按照如下方法,组成待签名串。待签名串共有五行,每行包括一个参数,行尾以\n 结束,包括最后一行,如果内容为空也需要占有换行符。请注意,\n 为换行符(ASCII 编码值为 0x0A)。
HTTP 请求方法\n URL\n请求时间戳\n
请求随机串\n请求报文\n
按照以上规则,请求报文的待签名串为:
POST /hk/v3/transactions/micropay 1507709906
kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
{
"appid": "wx2421b1c4370ec43b",
"transaction_id": "1008450740201411110005820873",
"out_trade_no": "1415757673"
}
其中第二步:
获取请求的 URL,并去除域名的部分,如果链接带参数,参数值必须进行 URLencode。示例请求的 URL 为
/hk/v3/transactions/micropay
如果是 get 请求,url为:
https://api.mch.weixin.qq.com/hk/v3/transactions/out-trade-no/123456?mchid=123456
问题1:
参与签名的url是
/hk/v3/transactions/out-trade-no/123456?mchid=123456 还是
/hk/v3/transactions/out-trade-no/123456 呢?
问题2:
参与签名的请求报文是空的吗?也就是说get请求中不需要把mchid=123456参与到请求报文中去,那么请求报文应该是{} 还是说直接就没有了呢?
已经解决。 get请求中 报文中只加一个换行符即可