账户中心 -> API安全 查询到 $platformCertificateSerial = config("wechatpay.payment.platform_cert_serial"); // // 从本地文件中加载「微信支付公钥」,用来验证微信支付应答的签名 // $platformPublicKeyFilePath = 'file://' . config("wechatpay.payment.public_key_path"); // $twoPlatformPublicKeyInstance = Rsa::from($platformPublicKeyFilePath, Rsa::KEY_TYPE_PUBLIC); // // 「微信支付公钥」的「微信支付公钥ID」 // // 需要在 商户平台 -> 账户中心 -> API安全 查询 // $platformPublicKeyId = config("wechatpay.payment.public_key_id"); // 构造一个 APIv3 客户端实例 $instance = Builder::factory([ 'mchid' => $merchantId, 'serial' => $merchantCertificateSerial, 'privateKey' => $merchantPrivateKeyInstance, 'certs' => [ $platformCertificateSerial => $onePlatformPublicKeyInstance, // $platformPublicKeyId => $twoPlatformPublicKeyInstance, ], ]); return $instance; } /** * 转账零钱 * @return void */ public function officialUserTransfer(string $trade_no, string $scene_id, string $openid, int $amount, string $remark, array $transfer_scene_report_infos = []): array { // 发送请求 if (empty(count($transfer_scene_report_infos))) { $transfer_scene_report_infos = [["info_type" => "报酬说明", "info_content" => "用户提取账户金额"]]; } try { $appid = config("wechat.official_account.default.app_id"); $data = [ "appid" => $appid, "out_bill_no" => $trade_no, "transfer_scene_id" => (string) $scene_id, "openid" => $openid, "transfer_amount" => $amount, "transfer_remark" => $remark, "transfer_scene_report_infos" => $transfer_scene_report_infos ]; Log::info("转账数据", $data); $instance = $this->newClient(); $resp = $instance->chain('v3/fund-app/mch-transfer/transfer-bills')->post([ "json" => $data ]); $res = json_decode($resp->getBody(), true); dd($res); } catch (\Exception $e) { // 进行异常捕获并进行错误判断处理 Log::info($e->getMessage()); if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) { $r = $e->getResponse(); $res = json_decode($r->getBody()); return ["code" => 1, "err_msg" => $res->message]; } return ["code" => 1, "err_msg" => $e->getMessage()]; } } /** * 转账银行卡 * @return void */ public function bankTransfer() { } }