wechatpay-apiv3 / wechatpay-php

微信支付 APIv3 的官方 PHP Library,同时也支持 APIv2
Apache License 2.0
496 stars 100 forks source link

微信支付订单查询接口,订单号大小写导致查询失败 #114

Closed liyiliang closed 1 year ago

liyiliang commented 1 year ago

运行环境

- OS:
- PHP:
- wechatpay-php:

描述你的问题现象

1.https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/-s-x-bwj-xxxx??mchid=13333333 原订单号查询请求时,大写字母S会转换为-s,订单长度校验的时候计算了-,导致正常的订单号,查询时,长度超出范围。 {"code":"PARAM_ERROR","detail":{"location":"uri_template","value":33},"message":"输入源“/uri_template/out_trade_no”映射到值字段“商户订单号”字符串规则校验失败,字节数 33,大于最大值 32"}

TheNorthMemory commented 1 year ago

摘录自README,请使用 uri_template 语法来填写单号,例如:

$instance->v3->pay->transactions->outTradeNo->_out_trade_no_->get([
  'out_trade_no' => 'SXBwj-xxxx',
  'query' => ['mchid' => '13333333'],
]);

为什么 URL 上的变量 OpenID,请求时被替换成小写了?

本 SDK 把 URL 中的大写视为包含连字号的 segment。请求时, camelCase 会替换为 camel-case。相关 issue 可参考 #56#69

为了避免大小写错乱,URL 中存在变量时的正确做法是:使用 链式 URI Template 的 Path 变量。比如: