Closed taoranxy closed 2 months ago
首先你调用的是 Native 下单接口,而不是 JSAPI 下单接口。
其次根据官方文档,这个字段是必填的:
REF: https://pay.weixin.qq.com/docs/merchant/apis/native-payment/direct-jsons/native-prepay.html
写记录日志的时候搞错了,是调用的 Native 下单接口,我也查了官方的文档,之前的版本(3.2.0及以前)是可以正常调用并且返回支付链接参数code_url的,可能是之前的版本有为此属性赋值
我仔细查询了微信支付的官方文档,属性 payer_client_ip 是在 scene_info 参数下的,scene_info是选填参数,但模型 CreatePayTransactionNativeRequest 在初始化的时候会创建 Scene(即scene_info),不同的是 3.2.0以后的版本未对 ClientIp(即 payer_client_ip)进行赋值,导致下单失败
我仔细查询了微信支付的官方文档,属性 payer_client_ip 是在 scene_info 参数下的,scene_info是选填参数,但模型 CreatePayTransactionNativeRequest 在初始化的时候会创建 Scene(即scene_info),不同的是 3.2.0以后的版本未对 ClientIp(即 payer_client_ip)进行赋值,导致下单失败
后续会将 scene_info
初值设为空。暂时可手动强制赋值为 null。
payer_client_ip
空字符串也能正常下单的问题已向官方反馈,后续应该会修复,建议按照规则传递正确的 IP 地址。
首先你调用的是 Native 下单接口,而不是 JSAPI 下单接口。
其次根据官方文档,这个字段是必填的:
REF: https://pay.weixin.qq.com/docs/merchant/apis/native-payment/direct-jsons/native-prepay.html
这里的类型应该是可为空类型,不然因为你传递了scene_info
字段,微信就会校验内部的payer_client_ip
字段了
微信文档里scene_info
字段也是非必填的
关于问题的简单描述
SKIT.FlurlHttpClient.Wechat.TenpayV3 升级3.2.0以上版本后,提示下单失败,将其降回3.2.0及以下时,可正常调用。
与问题相关的源代码
异常堆栈或异常原因
JSAPI 下单失败(状态码:400,错误代码:PARAM_ERROR,错误描述:输入源“/body/scene_info/payer_client_ip”映射到字段“用户终端IP”必填性规则校验失败,此字段为必填项)。