调用微信转账接口报错:
Error message: Client error: `POST https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills` resulted in a `400 Bad Request` response:
{"code":"PARAM_ERROR","message":"请确认待处理的消息是否为加密后的密文"}
代码:
$promise = $instance
->chain('v3/fund-app/mch-transfer/transfer-bills')
->postAsync([
'json' => [
'appid' => WX_APPID,
'out_bill_no' => $out_bill_no,
'openid' => $open_id,
'user_name' => $user_nickname,
'transfer_amount' => $amount,
'transfer_remark' => '用户佣金提现',
'notify_url' => $callback_url,
'user_recv_perception' => '平台佣金',
'transfer_scene_id' => '1005',
'transfer_scene_report_infos' => [
[
'info_type' => '岗位类型',
'info_content' => '分销商',
],
[
'info_type' => '报酬说明',
'info_content' => '订单佣金提现',
],
],
],
'headers' => [
'Wechatpay-Serial' => $platformCertificateSerial,
],
])->then(static function($response) {
self::$response = $response;
// 正常逻辑回调处理
Log::info('Refund body: ' . $response->getBody());
})->otherwise(static function($e) {
// 异常错误处理
Log::info('Error message: ' . $e->getMessage());
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$r = $e->getResponse();
Log::info('Error StatusCode: ' . $r->getStatusCode() . ' ' . $r->getReasonPhrase());
Log::info('Error body: ' . $r->getBody());
}
Log::info('TraceAsString: ' . $e->getTraceAsString());
});
// 同步等待
$promise->wait();
传user_name,user_name需要用平台证书/平台公钥加密