项目场景:
提示:之前微信转账用的挺好 微信官方发布要更新方式 一直没注意 线上程序突然不能用 调试一直有问题
问题描述
问题描述: 微信返回状态码异常,请检查参数是否错误
解决方案:
必须条件 1:yansongda/pay 版本必须 > 3.7.12
"yansongda/pay": "~3.7.12"
//只更新 yansongda/pay
composer update yansongda/pay
//更新全部 composer 包
composer update
提必须条件 2:商家要开通商家转账到零钱 如果关闭 在打开,只能使用新版(详细 找到这个页面放到最后)
原因分析:
提示:: 这里要非常注意一下 如果你的 商家转账到零钱是2025.1.15之前申请的 还是用的旧的
1.估计这里作者是想过滤到一些报错 但把有些 缺少参数和 参数报错也给淹没掉了 这个有点难受
2.这里就自行打印了一下 vendor/yansongda/pay/src/Plugin/Wechat/ResponsePlugin.php 大概第 37行 打印一下 echo $response->getBody();
3.这里 注意下 'appid' => get_sys_config('wechat_web_app_id'), 这个闫嵩达前辈的 官网给的 商家转账到零钱旧版 缺少一个这个参数 调用会一直提示 微信返回状态码异常,请检查参数是否错误
protected function validateResponse(Rocket $rocket): void
{
$response = $rocket->getDestinationOrigin();
echo $response->getBody(); // 打印请求体
if ($response instanceof ResponseInterface
&& ($response->getStatusCode() < 200 || $response->getStatusCode() >= 300)) {
throw new InvalidResponseException(Exception::RESPONSE_CODE_WRONG, '微信返回状态码异常,请检查参数是否错误', $rocket->getDestination());
}
}
try {
// $order = [
// '_action' => 'mch_transfer', // 微信官方老版本下线后,此部分可省略
// 'out_bill_no' => $partner_trade_no,
// 'transfer_scene_id' => '1001',
// 'openid' => $openid,
// // 'user_name' => '闫嵩达' // 明文传参即可,sdk 会自动加密
// 'transfer_amount' => $re_user_account,
// 'transfer_remark' => '分销返佣',
// 'transfer_scene_report_infos' => [
// ['info_type' => '活动名称', 'info_content' => '新会员有礼'],
// ['info_type' => '奖励说明', 'info_content' => '注册会员抽奖一等奖'],
// ]
// ];
$order = [
'out_batch_no' => $partner_trade_no,
'batch_name' => 'subject-测试',
'batch_remark' => '分销返佣',
'total_amount' => $re_user_account,
'total_num' => 1,
'appid' => get_sys_config('wechat_web_app_id'),
'transfer_detail_list' => [
[
'out_detail_no' => $partner_trade_no,
'transfer_amount' => $re_user_account,
'transfer_remark' => '分销返佣',
'openid' => $openid,
// 'user_name' => '闫嵩达' // 明文传参即可,sdk 会自动加密
],
],
];
$result = Pay::wechat()->transfer($order);
return $result;
}catch (\Exception $e){
// throw new \Exception($e->getMessage());
throw new \Exception('提现失败,请联系管理员');
}
}