微信文档说, 正式环境跟测试环境的是一致的, 其实有很多坑
特别是第二个. 百度,谷歌都用了, 没人说明
-
沙箱支付金额(5000)无效,请检查需要验收的case
解决:金额只能是 1.01 和 1.0.2
-
[请确认请求参数是否正确param out_trade_no invalid]
碰到这个不出意外应该是直接用的官方支付的示例, 代码在订单异步回调的时候, 通过transaction_id 或者 out_trade_no查询订单, 生产环境没问题, 可以只通过transaction_id 过检测 但是沙盒环境, 则必须有 out_trade_no
上代码
// 查询订单 把第三个参数 $out_trade_no 加上
public function Queryorder($transaction_id,$config,$out_trade_no=false)
{
$input = new \WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
if( $out_trade_no!==false ) {
$input->SetOut_trade_no($out_trade_no);
}
$result = \WxPayApi::orderQuery($config, $input);
// Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
return true;
}
return false;
}
// 这个方法里面
public function NotifyProcess($objData, $config, &$msg) {
// 加上第三个参数 $data['out_trade_no']
if(!$this->Queryorder($data["transaction_id"],$config,$data['out_trade_no'])){
\Log::DEBUG("微信支付回调异常, 订单查询失败,查询订单号:".$data["transaction_id"]);
return false;
}
}