transfer
This commit is contained in:
parent
0dd68d8700
commit
42729d0f3d
11
app/Facades/AlipayService.php
Normal file
11
app/Facades/AlipayService.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Facades;
|
||||
|
||||
class AlipayService extends \Illuminate\Support\Facades\Facade
|
||||
{
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return 'alipayservice';
|
||||
}
|
||||
}
|
||||
13
app/Facades/UtilService.php
Normal file
13
app/Facades/UtilService.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Facades;
|
||||
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
class UtilService extends Facade
|
||||
{
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return 'utilservice';
|
||||
}
|
||||
}
|
||||
11
app/Facades/WechatPayService.php
Normal file
11
app/Facades/WechatPayService.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Facades;
|
||||
|
||||
class WechatPayService extends \Illuminate\Support\Facades\Facade
|
||||
{
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return 'wechatpayservice';
|
||||
}
|
||||
}
|
||||
174
app/Http/Controllers/Admin/EarningController.php
Normal file
174
app/Http/Controllers/Admin/EarningController.php
Normal file
@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Facades\AlipayService;
|
||||
use App\Facades\WechatPayService;
|
||||
use App\Http\Response\ResponseJson;
|
||||
use App\Models\Live\Anchor;
|
||||
use App\Models\Server\MEarningAccount;
|
||||
use App\Models\Server\MEarningwithdraws;
|
||||
use App\Models\Server\MerchantAccount;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class EarningController
|
||||
{
|
||||
use ResponseJson;
|
||||
public function auditWithdraw(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$admin_id = auth()->id();
|
||||
$log = MEarningwithdraws::where('id', $id)->where('status', 'freezing')->first();
|
||||
if (empty($log))
|
||||
return $this->failure('该记录不存在或已被其他管理员审核');
|
||||
//获取该商户的收益账号
|
||||
$account = MEarningAccount::where('m_id', $log->m_id)->where('m_user_id', 0)->first();
|
||||
$balance = $account->balance;//账户余额
|
||||
$frozen_withdraw = $account->frozen_withdraw;//账户冻结提现金额
|
||||
//如果当前用户冻结提现金额 小于 本次提现金额
|
||||
if ($frozen_withdraw < $log->value)
|
||||
return $this->failure('当前账户异常,联系开发人员处理');
|
||||
$anchor = Anchor::where('m_id', $log->m_id)->first();
|
||||
$openid = MerchantAccount::where('id', $log->m_id)->value('openid');//商家openid
|
||||
if (empty($openid))
|
||||
$openid = $anchor->openid;
|
||||
if ($log->way == 'alipay') {
|
||||
$transfer_way = '支付宝';
|
||||
} elseif ($log->way == 'weixin') {
|
||||
$transfer_way = '微信';
|
||||
} elseif ($log->way == 'bank') {
|
||||
$transfer_way = '银行卡';
|
||||
}
|
||||
$status = $request->status;
|
||||
if (!in_array($status, ['finished', 'canceled', 'manual']))
|
||||
throw new \Exception("提供审核参数有误", 1);
|
||||
$url = '';
|
||||
DB::beginTransaction();
|
||||
switch ($status) {
|
||||
case 'finished': //审核通过
|
||||
if ($log->way == 'alipay') {
|
||||
$data = [];
|
||||
$data['remark'] = '提现已到账'; //提现备注
|
||||
$data['out_biz_no'] = $log->trade_no;
|
||||
$data['amount'] = $log->real_value;//实际到账金额
|
||||
$data['payee_account'] = $log->account;//支付宝账号
|
||||
$data['payee_real_name'] = $log->name;//支付宝绑定姓名
|
||||
if ($log->alipay_id)
|
||||
$data['payee_account'] = $log->alipay_id;
|
||||
if ($log->alipay_id) {//通过支付宝id打款
|
||||
$result = AlipayService::UserTransferAccount($data);
|
||||
} else {//通过支付宝账号和名字打款
|
||||
$result = AlipayService::platTransferAccount($data);
|
||||
}
|
||||
} elseif ($log->way == 'weixin') {
|
||||
$result = WechatPayService::officialUserTransfer($log->trade_no, $log->account, $log->real_value * 100, '提现已到账');
|
||||
} elseif ($log->way == 'bank') {
|
||||
$result = WechatPayService::bankTransfer($log->trade_no, $log->account, $log->name, $log->bank_code, $log->real_value * 100, '打款至个人银行卡');
|
||||
}
|
||||
//\Log::info($result);
|
||||
//判断打款是否成功
|
||||
if (is_array($result)) {//失败
|
||||
//\Log::info('打款失败');
|
||||
$err_msg = isset($result['msg']) ? $result['msg'] : $result['err_code_des'];
|
||||
return $this->failure($err_msg);
|
||||
$log->update(['status' => 'canceled', 'admin_id' => $admin_id, 'audit_at' => date('Y-m-d H:i:s'), 'err_msg' => $err_msg]);
|
||||
$account->update(['frozen_withdraw' => $frozen_withdraw - $log->value, 'balance' => $balance + $log->value]);
|
||||
// 短信通知 邓智锋
|
||||
$mobile = '15707534403';
|
||||
$message = '商户' . $anchor->name . ' 提现' . $log->real_value . '元失败,原因:' . $err_msg;
|
||||
$this->sentMessage($mobile, $message);
|
||||
//模板通知 邓智锋
|
||||
$data['touser'] = ['oPC_2vnSECnYp5p--uaq3rca3Ry0', 'oPC_2vpJd34uN2E1tTsFbf8Lhlcs'];
|
||||
$data['template_id'] = 'AqwVt0liVmQfzfnX3ZGvmVOdOh62nkCbhlOUI0NVQGs';
|
||||
$data['url'] = $url;
|
||||
$data['data'] = [
|
||||
'first' => '商户' . $anchor->name . '提现失败',
|
||||
'keyword1' => $log->real_value . '元',
|
||||
'keyword2' => $transfer_way,
|
||||
'keyword3' => $err_msg,
|
||||
'remark' => '点击查看提现记录',
|
||||
];
|
||||
SendTemplateMsg::dispatch($data)->onQueue('template_message');
|
||||
//短信通知
|
||||
$message = $anchor->name . ',提现' . $log->real_value . '元失败,具体原因请查看你的后台系统的提现反馈。';
|
||||
$this->sentMessage($anchor->mobile, $message);
|
||||
DB::commit();
|
||||
return $this->failure($err_msg);
|
||||
} else {//成功
|
||||
//\Log::info('打款成功');
|
||||
$log->update(['status' => 'finished', 'admin_id' => $admin_id, 'audit_at' => date('Y-m-d H:i:s')]);
|
||||
//将冻结提现金额 换成已提现金额 //冻结提现金额 0
|
||||
$account->withdrawl = $account->withdrawl + $log->value;
|
||||
$account->frozen_withdraw = $account->frozen_withdraw - $log->value;
|
||||
$account->save();
|
||||
//模板通知
|
||||
$data['touser'] = $openid;
|
||||
$data['template_id'] = 'aV4ic7jr5bOlf55CgR0jmMsFYyhdRAiVmqqXEjnUqQU';
|
||||
$data['url'] = $url;
|
||||
$data['data'] = [
|
||||
'first' => '提现已到账,请在' . $transfer_way . '查收',
|
||||
'keyword1' => $log->real_value . '元',
|
||||
'keyword2' => date('Y-m-d H:i:s'),
|
||||
'keyword3' => '提现到' . $transfer_way . '余额',
|
||||
'remark' => '感谢您的的使用',
|
||||
];
|
||||
SendTemplateMsg::dispatch($data)->onQueue('template_message');
|
||||
//短信通知
|
||||
$message = $anchor->name . ',提现金额' . $log->real_value . '元已到账,请在' . $transfer_way . '查收。';
|
||||
$this->sentMessage($anchor->mobile, $message);
|
||||
}
|
||||
break;
|
||||
case 'canceled': //审核拒绝
|
||||
$reason = $request->reason;
|
||||
if (!$reason)
|
||||
return $this->failure('请输入拒绝理由');
|
||||
$account->update(['frozen_withdraw' => $frozen_withdraw - $log->value, 'balance' => $balance + $log->value]);
|
||||
$log->update(['status' => $status, 'admin_id' => $admin_id, 'audit_at' => date('Y-m-d H:i:s'), 'err_msg' => $request->reason]);
|
||||
$data['touser'] = $openid;
|
||||
$data['template_id'] = 'AqwVt0liVmQfzfnX3ZGvmVOdOh62nkCbhlOUI0NVQGs';
|
||||
$data['url'] = $url;
|
||||
$data['data'] = [
|
||||
'first' => '商户' . $anchor->name . '提现失败',
|
||||
'keyword1' => $log->real_value . '元',
|
||||
'keyword2' => $transfer_way,
|
||||
'keyword3' => $reason,
|
||||
'remark' => '账号信息存在异常',
|
||||
];
|
||||
$message = $anchor->name . ',提现' . $log->real_value . '元失败,失败原因:' . $reason . ',具体原因请查看你的后台系统的提现反馈。';
|
||||
$this->sentMessage($anchor->mobile, $message);
|
||||
SendTemplateMsg::dispatch($data)->onQueue('template_message');
|
||||
break;
|
||||
case 'manual': //手工处理
|
||||
//\Log::info('打款已经由人工处理');
|
||||
// $log->update(['status' => 'finished', 'admin_id' => $admin_id, 'audit_at' => date('Y-m-d H:i:s'), 'way' => 'manual']);
|
||||
// //将冻结提现金额 换成已提现金额 //冻结提现金额 0
|
||||
// $account->withdrawl = $account->withdrawl + $log->value;
|
||||
// $account->frozen_withdraw = $account->frozen_withdraw - $log->value;
|
||||
// $account->save();
|
||||
// //模板通知用户
|
||||
// $data['touser'] = ['oPC_2vudVLVHj2U7dNinr2IEDHR4', 'oPC_2vuTj7YRgUzQQY7PlSJVLBBc'];
|
||||
// $data['template_id'] = 'OwXPF2dKEjPQUoGyzH944ATsJ6SgxpZ8kzB-KVVxanY';
|
||||
// $data['url'] = $url;
|
||||
// $data['data'] = [
|
||||
// 'first' => '商户:' . $anchor->name . '提现人工审核通过,处理方式:手工打款,请即时处理',
|
||||
// 'keyword1' => $anchor->name,
|
||||
// 'keyword2' => date('Y-m-d H:i:s'),
|
||||
// 'keyword3' => $log->real_value . '元',
|
||||
// 'keyword4' => '手动打款处理',
|
||||
// 'remark' => '提现人工审核通过,处理方式:手工打款',
|
||||
// ];
|
||||
// SendTemplateMsg::dispatch($data)->onQueue('template_message');
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
DB::commit();
|
||||
return $this->success('审核完成');
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
$this->getError($e);
|
||||
return $this->failure('审核失败,请联系开发人员');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Facades\UtilService;
|
||||
use App\Facades\WechatPayService;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
@ -13,6 +15,12 @@ class Controller extends BaseController
|
||||
|
||||
public function test()
|
||||
{
|
||||
dd(1);
|
||||
$trade_no = UtilService::getTradeNo();
|
||||
$scene_id = config("wechatpay.screen.commission");
|
||||
$openid = "oPC_2vneOWpQbicNZQAUCxuwZ4mw";
|
||||
$amount = 100;
|
||||
$remark = "测试";
|
||||
$res = WechatPayService::officialUserTransfer($trade_no, $scene_id, $openid, $amount, $remark);
|
||||
dd($res);
|
||||
}
|
||||
}
|
||||
|
||||
13
app/Models/Live/Anchor.php
Normal file
13
app/Models/Live/Anchor.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Live;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class Anchor extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
protected $fillable = ['m_id'];
|
||||
protected $table = 'live_anchors';
|
||||
}
|
||||
11
app/Models/Server/MEarningAccount.php
Normal file
11
app/Models/Server/MEarningAccount.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Server;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class MEarningAccount extends Model
|
||||
{
|
||||
protected $fillable = [];
|
||||
protected $guarded = [];
|
||||
}
|
||||
12
app/Models/Server/MEarningwithdraws.php
Normal file
12
app/Models/Server/MEarningwithdraws.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Server;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class MEarningwithdraws extends Model
|
||||
{
|
||||
protected $table = 'm_earning_withdraws';
|
||||
protected $fillable = [];
|
||||
protected $guarded = [];
|
||||
}
|
||||
@ -2,7 +2,10 @@
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Services\AlipayService;
|
||||
use App\Services\UploadService;
|
||||
use App\Services\UtilService;
|
||||
use App\Services\WechatPayService;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
@ -17,6 +20,15 @@ class AppServiceProvider extends ServiceProvider
|
||||
$this->app->singleton('uploadservice', function () {
|
||||
return new UploadService();
|
||||
});
|
||||
$this->app->singleton('wechatpayservice', function () {
|
||||
return new WechatPayService();
|
||||
});
|
||||
$this->app->singleton('alipayservice', function () {
|
||||
return new AlipayService();
|
||||
});
|
||||
$this->app->singleton('utilservice', function () {
|
||||
return new UtilService();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
24
app/Services/AlipayService.php
Normal file
24
app/Services/AlipayService.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
class AlipayService
|
||||
{
|
||||
/**
|
||||
* 支付宝id转账
|
||||
* @return void
|
||||
*/
|
||||
public function UserTransferAccount()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过支付宝账号和名字打款
|
||||
* @return void
|
||||
*/
|
||||
public function platTransferAccount()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
18
app/Services/UtilService.php
Normal file
18
app/Services/UtilService.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
class UtilService
|
||||
{
|
||||
/**
|
||||
* 随机生成16位数,作为本地服务器的支付订单ID
|
||||
* @return string
|
||||
*/
|
||||
public function getTradeNO()
|
||||
{
|
||||
$dateline = time();
|
||||
$mix_1 = rand(100, 999);
|
||||
$mix_2 = rand(100, 999);
|
||||
return $dateline . $mix_1 . $mix_2;
|
||||
}
|
||||
}
|
||||
103
app/Services/WechatPayService.php
Normal file
103
app/Services/WechatPayService.php
Normal file
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use WeChatPay\Builder;
|
||||
use WeChatPay\BuilderChainable;
|
||||
use WeChatPay\Crypto\Rsa;
|
||||
|
||||
class WechatPayService
|
||||
{
|
||||
/**
|
||||
* 初始化一个APIv3客户端
|
||||
* @return void
|
||||
*/
|
||||
private function newClient(): BuilderChainable
|
||||
{
|
||||
// 商户号
|
||||
$merchantId = config("wechatpay.payment.mch_id");
|
||||
|
||||
// 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名
|
||||
$merchantPrivateKeyFilePath = 'file://' . config("wechatpay.payment.cert_key_path");
|
||||
$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
|
||||
|
||||
// 「商户API证书」的「证书序列号」
|
||||
$merchantCertificateSerial = config("wechatpay.payment.serial");
|
||||
|
||||
// 从本地文件中加载「微信支付平台证书」,可由内置CLI工具下载到,用来验证微信支付应答的签名
|
||||
$platformCertificateFilePath = 'file://' . config("wechatpay.payment.platform_cert_path");
|
||||
$onePlatformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);
|
||||
|
||||
// 「微信支付平台证书」的「平台证书序列号」
|
||||
// 可以从「微信支付平台证书」文件解析,也可以在 商户平台 -> 账户中心 -> 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");
|
||||
$instance = $this->newClient();
|
||||
$resp = $instance->chain('v3/fund-app/mch-transfer/transfer-bills')->post([
|
||||
"json" => [
|
||||
"appid" => $appid,
|
||||
"out_bill_no" => $trade_no,
|
||||
"transfer_scene_id" => $scene_id,
|
||||
"openid" => $openid,
|
||||
"transfer_amount" => $amount,
|
||||
"transfer_remark" => $remark,
|
||||
"transfer_scene_report_infos" => $transfer_scene_report_infos
|
||||
]
|
||||
]);
|
||||
$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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@ -10,7 +10,8 @@
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"laravel/framework": "^9.19",
|
||||
"laravel/sanctum": "^3.0",
|
||||
"laravel/tinker": "^2.7"
|
||||
"laravel/tinker": "^2.7",
|
||||
"wechatpay/wechatpay": "^1.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.9.1",
|
||||
|
||||
75
composer.lock
generated
75
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "90bf28afc39610ecdbd4915168d447df",
|
||||
"content-hash": "9824f12aeda8b0dc6d475ee5d9fb8ba9",
|
||||
"packages": [
|
||||
{
|
||||
"name": "alibabacloud/oss-v2",
|
||||
@ -6055,6 +6055,79 @@
|
||||
"source": "https://github.com/webmozarts/assert/tree/1.11.0"
|
||||
},
|
||||
"time": "2022-06-03T18:03:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "wechatpay/wechatpay",
|
||||
"version": "1.4.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/wechatpay-apiv3/wechatpay-php.git",
|
||||
"reference": "bd2148e0456f560df4d1c857d6cd1f8ad9f5222e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/wechatpay-apiv3/wechatpay-php/zipball/bd2148e0456f560df4d1c857d6cd1f8ad9f5222e",
|
||||
"reference": "bd2148e0456f560df4d1c857d6cd1f8ad9f5222e",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||
"preferred": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-simplexml": "*",
|
||||
"guzzlehttp/guzzle": "^6.5 || ^7.0",
|
||||
"guzzlehttp/uri-template": "^0.2 || ^1.0",
|
||||
"php": ">=7.1.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^0.12.89 || ^1.0",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5.16 || ^9.3.5"
|
||||
},
|
||||
"bin": [
|
||||
"bin/CertificateDownloader.php"
|
||||
],
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"WeChatPay\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "James ZHANG",
|
||||
"homepage": "https://github.com/TheNorthMemory"
|
||||
},
|
||||
{
|
||||
"name": "WeChatPay Community",
|
||||
"homepage": "https://developers.weixin.qq.com/community/pay"
|
||||
}
|
||||
],
|
||||
"description": "[A]Sync Chainable WeChatPay v2&v3's OpenAPI SDK for PHP",
|
||||
"homepage": "https://pay.weixin.qq.com/",
|
||||
"keywords": [
|
||||
"AES-GCM",
|
||||
"aes-ecb",
|
||||
"openapi-chainable",
|
||||
"rsa-oaep",
|
||||
"wechatpay",
|
||||
"xml-builder",
|
||||
"xml-parser"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/wechatpay-apiv3/wechatpay-php/issues",
|
||||
"source": "https://github.com/wechatpay-apiv3/wechatpay-php/tree/v1.4.12"
|
||||
},
|
||||
"time": "2025-01-26T14:16:41+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
|
||||
87
config/wechat.php
Normal file
87
config/wechat.php
Normal file
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
* 账号基本信息,请从微信公众平台/开放平台获取
|
||||
*/
|
||||
'app_id' => env('WECHAT_APPID', 'wx2485d1c0ddd1eb24'), // AppID
|
||||
'secret' => env('WECHAT_SECRET', '7b63c3b030333c6bae890a4221e65374'), // AppSecret
|
||||
'token' => env('WECHAT_TOKEN', 'weiphp'), // Token
|
||||
'aes_key' => env('WECHAT_AES_KEY', 'vLvcmNuEZkY3Ww6wNJQIPxA8QauTAHrHwsL6SgjdCnt'), // EncodingAESKey
|
||||
|
||||
'official_account' => [
|
||||
'default' => [
|
||||
'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'wx2485d1c0ddd1eb24'), // AppID
|
||||
'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', '7b63c3b030333c6bae890a4221e65374'), // AppSecret
|
||||
'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'weiphp'), // Token
|
||||
'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', 'vLvcmNuEZkY3Ww6wNJQIPxA8QauTAHrHwsL6SgjdCnt'), // EncodingAESKey
|
||||
/*
|
||||
* OAuth 配置
|
||||
*
|
||||
* scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
|
||||
* callback:OAuth授权完成后的回调页地址(如果使用中间件,则随便填写。。。)
|
||||
*/
|
||||
'oauth' => [
|
||||
'scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),
|
||||
'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
|
||||
],
|
||||
],
|
||||
'znsj' => [
|
||||
'app_id' => env('OTHER_WECHAT_OFFICIAL_ACCOUNT_APPID', 'wx0745fa0688992c01'), // AppID
|
||||
'secret' => env('OTHER_WECHAT_OFFICIAL_ACCOUNT_SECRET', 'af3366efe18b1149da9567ec1414d9af'), // AppSecret
|
||||
|
||||
'oauth' => [
|
||||
'scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_base'))),
|
||||
'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
|
||||
],
|
||||
],
|
||||
'ufutx' => [
|
||||
'app_id' => env('UFUTX_WECHAT_OFFICIAL_ACCOUNT_APPID', 'wx7e80298ed20df081'), // AppID
|
||||
'secret' => env('UFUTX_WECHAT_OFFICIAL_ACCOUNT_SECRET', 'e118a5ec4974068a75846517f8baf9e3'), // AppSecret
|
||||
|
||||
'oauth' => [
|
||||
'scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_base'))),
|
||||
'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
|
||||
],
|
||||
],
|
||||
'new' => [
|
||||
'app_id' => env('NEW_UFUTX_WECHAT_OFFICIAL_ACCOUNT_APPID', 'wx36c72a00f1b2be64'), // AppID
|
||||
'secret' => env('NEW_UFUTX_WECHAT_OFFICIAL_ACCOUNT_SECRET', '77f3fa72e17186ecc94ca3038a3ec467'), // AppSecret
|
||||
'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'fulink'),
|
||||
'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', 'BSJ8qDeiIXdCxc9ZK0Z4lHD7FxfWMd68uMFMu4hYO8h'),
|
||||
'oauth' => [
|
||||
'scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),
|
||||
'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
|
||||
],
|
||||
],
|
||||
'test' => [
|
||||
'app_id' => env('TEST_WECHAT_OFFICIAL_ACCOUNT_APPID', 'wx4adff200da8333ca'), // AppID
|
||||
'secret' => env('TEST_WECHAT_OFFICIAL_ACCOUNT_SECRET', '5fcb32966614cd61fd22ec53e820d48b'), // AppSecret
|
||||
'token' => env('TEST_WECHAT_OFFICIAL_ACCOUNT_TOKEN', ''),
|
||||
'aes_key' => env('TEST_WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''),
|
||||
'oauth' => [
|
||||
'scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_base'))),
|
||||
'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/wx/test/login'),
|
||||
],
|
||||
'response_type' => 'array',
|
||||
],
|
||||
//福恋订阅号
|
||||
'fulink' => [
|
||||
'app_id' => env('FULINK_WECHAT_OFFICIAL_ACCOUNT_APPID', 'wx8260646b00d5d615'), // AppID
|
||||
'secret' => env('FULINK_WECHAT_OFFICIAL_ACCOUNT_SECRET', '77f3fa72e17186ecc94ca3038a3ec467'), // AppSecret
|
||||
'token' => env('FULINK_WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'weiphp'),
|
||||
'aes_key' => env('FULINK_WECHAT_OFFICIAL_ACCOUNT_AES_KEY', '39LDjI8q9oPWVH25xynJSDqCzOw0bYMR0F0sUX14XS0'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/**
|
||||
* 小程序配置信息
|
||||
*/
|
||||
'mini_program' => [
|
||||
'app_id' => env('WECHAT_MINI_PROGRAM_APPID', 'wxc41491431733671e'),
|
||||
'secret' => env('WECHAT_MINI_PROGRAM_SECRET', '21cb800372b79c205c7235ae2cd9a6d7'),
|
||||
'token' => env('WECHAT_MINI_PROGRAM_TOKEN', 'love'),
|
||||
'aes_key' => env('WECHAT_MINI_PROGRAM_AES_KEY', 'gx31ucZ7tqDVRZekaPD1JzmaSCv5sLUs4rmJJ0snX9Y'),
|
||||
],
|
||||
];
|
||||
42
config/wechatpay.php
Normal file
42
config/wechatpay.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
* 福恋智能微信支付
|
||||
*/
|
||||
'payment' => [
|
||||
'mch_id' => env('WECHAT_PAYMENT_MERCHANT_ID', ''), // 商户id
|
||||
|
||||
'cert_path' => env('WECHAT_PAYMENT_CERT_PATH', ''), // 商户API证书
|
||||
'cert_key_path' => env('WECHAT_PAYMENT_CERT_KEY_PATH', ''), // 商户API证书秘钥
|
||||
'serial' => env('WECHAT_PAYMENT_SERIAL', ''), // 商户证书序列号
|
||||
|
||||
'api2_key_path' => env('WECHAT_PAYMENT_API2_KEY_PATH', ''), // APIv2秘钥
|
||||
'api3_key_path' => env('WECHAT_PAYMENT_API3_KEY_PATH', ''), // APIv3秘钥
|
||||
|
||||
'public_key_path' => env('WECHAT_PAYMENT_PUBLIC_KEY_PATH', ''), // 微信支付公钥
|
||||
'public_key_id' => env('WECHAT_PAYMENT_PUBLIC_KEY_ID', ''), // 微信支付公钥ID
|
||||
|
||||
'platform_cert_path' => env('WECHAT_PUBLIC_PLATFORM_PATH', ''), // 平台证书
|
||||
'platform_cert_serial' => env('WECHAT_PAYMENT_PUBLIC_PLATFORM_SERIAL', ''), // 平台证书序列号
|
||||
|
||||
'debug' => env('WECHAT_PAYMENT_DEBUG', false),
|
||||
],
|
||||
|
||||
"screen" => [
|
||||
"commission" => 1005, //佣金报酬
|
||||
],
|
||||
|
||||
/**
|
||||
* 服务商支付
|
||||
*/
|
||||
'service_payment' => [
|
||||
'mch_id' => env('SERVICE_PAYMENT_MERCHANT_ID', '1581887811'),
|
||||
'key' => env('SERVICE_PAYMENT_KEY', 'b8c8ead6dbd4d351e6f3f2340f1244f8'),
|
||||
'app_id' => env('SERVICE_OFFICIAL_APP_ID', 'wx36c72a00f1b2be64'),
|
||||
'cert_path' => env('SERVICE_PAYMENT_CERT_PATH', ''), // XXX: 绝对路径!!!!
|
||||
'key_path' => env('SERVICE_PAYMENT_KEY_PATH', ''), // XXX: 绝对路径!!!!
|
||||
'serial' => env('SERVICE_PAYMENT_MERCHANT_CERT_SERIAL', '37A244C365A3FEED15CC650B027D1BE82CB8AEDE'),
|
||||
'sandbox' => env('SERVICE_PAYMENT_SANDBOX', false),
|
||||
],
|
||||
];
|
||||
@ -1,6 +1,8 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Admin\EarningController;
|
||||
use App\Http\Controllers\CommonController;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
//ueditor上传
|
||||
@ -9,3 +11,12 @@ Route::prefix("upload")->group(function () {
|
||||
Route::post('/ueditor', [CommonController::class, "upload"]);
|
||||
|
||||
});
|
||||
|
||||
//微信转账
|
||||
Route::prefix("transfer")->group(function () {
|
||||
//saas端提现审核
|
||||
Route::put('saas/withdraw/{id}/audit/transfer', [EarningController::class, "auditWithdraw"])->where('id', '[0-9]+');
|
||||
|
||||
});
|
||||
|
||||
Route::get("test", [Controller::class, "test"]);
|
||||
|
||||
@ -20,4 +20,3 @@ Route::get('/', function () {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
storage/wechatpay/apiclient_cert.p12
Normal file
BIN
storage/wechatpay/apiclient_cert.p12
Normal file
Binary file not shown.
25
storage/wechatpay/apiclient_cert.pem
Normal file
25
storage/wechatpay/apiclient_cert.pem
Normal file
@ -0,0 +1,25 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIELjCCAxagAwIBAgIUdbjd05etb5a/eQSuX3Z8OfJejcEwDQYJKoZIhvcNAQEL
|
||||
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
|
||||
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
|
||||
Q0EwHhcNMjUwNTIzMDI0MTE1WhcNMzAwNTIyMDI0MTE1WjCBhzETMBEGA1UEAwwK
|
||||
MTU4MTkwMzYyMTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTMwMQYDVQQL
|
||||
DCrmt7HlnLPnpo/mgYvmmbrog73kv6Hmga/np5HmioDmnInpmZDlhazlj7gxCzAJ
|
||||
BgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQAD
|
||||
ggEPADCCAQoCggEBALrFQuuoccWz0lWLUTuj6okS31WztrXH7XId6ozcyuqx5cDc
|
||||
WA8EL4qV/Dlzye71vMaCMno9t+IHIBF3p5S/s7o9yB7V/HHdxtgE0LdTasqugNFP
|
||||
K6YMDVwgNnsIi/TpG0cYZEAHAsxKZ/eWbzvUeHtcLhaLqV6mI0mTbNC1Pxcxs1dv
|
||||
+AG2M/Y3027qA7lUov8vr3MkmqR69/WINaVb6AuH2zTjRATNWBBAFmZldaEVLV+N
|
||||
XEy7DTusU5zhoywqeo75v02irSICE1FUdKLPTDK+Zb0mT6omwRaU6YDTnSjZAl6t
|
||||
pNulNYs9M4tW9ADbPbmylyunfu+AUiBnszhjkOMCAwEAAaOBuTCBtjAJBgNVHRME
|
||||
AjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDov
|
||||
L2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUw
|
||||
REJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJF
|
||||
MTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IB
|
||||
AQA0/4EmJf8ZVjNesmTdzklJyE6ZkshlAFWJOFhGqH/gYHGqBjxP+h0NNyET5d7J
|
||||
pijMCq4g+SfaW0WJ2bq0y7iF5KltqHgbx2Niunu1F8MVJjZyikiTMeradjlUL8Un
|
||||
rwbBNpzYwE/6OkT0XowpJaIZzCClB16cf4vLSmFxLcRntOll7kMFAMWznfXiQllN
|
||||
mVst0sRNop9qaLgiVpX7uoYTiaO9Kj/BcTxIxSxLUYVx4piojJ9AxgBAm7rGFvE8
|
||||
iOO5O3TFOkWqR2dVYMEbQYQA9b3YQ0xbSK8Px2vHkcFAj1+fhnThcOHL8dlr5Qgn
|
||||
wZF/z5dlVNeITS3YoeGqGF9t
|
||||
-----END CERTIFICATE-----
|
||||
28
storage/wechatpay/apiclient_key.pem
Normal file
28
storage/wechatpay/apiclient_key.pem
Normal file
@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC6xULrqHHFs9JV
|
||||
i1E7o+qJEt9Vs7a1x+1yHeqM3MrqseXA3FgPBC+Klfw5c8nu9bzGgjJ6PbfiByAR
|
||||
d6eUv7O6Pcge1fxx3cbYBNC3U2rKroDRTyumDA1cIDZ7CIv06RtHGGRABwLMSmf3
|
||||
lm871Hh7XC4Wi6lepiNJk2zQtT8XMbNXb/gBtjP2N9Nu6gO5VKL/L69zJJqkevf1
|
||||
iDWlW+gLh9s040QEzVgQQBZmZXWhFS1fjVxMuw07rFOc4aMsKnqO+b9Noq0iAhNR
|
||||
VHSiz0wyvmW9Jk+qJsEWlOmA050o2QJeraTbpTWLPTOLVvQA2z25spcrp37vgFIg
|
||||
Z7M4Y5DjAgMBAAECggEBAJogIuNZs9mUVSRmvXhcAjVvr4GHtmU4QQgFDAOGSKV4
|
||||
fMK0kq6Bo8HXl7bJiIB7pXajBoi92braamo/tbkYoXY1eamIqLRGccrd3mcKnXv4
|
||||
mTEhBkIWfAfkRVEucmB+5RW8WS5FGtf/JuC38b8LzQjvvtC4G+KRc1lKIWfxyciW
|
||||
vWUjqyCHItS9vLgm36CsttGiRKhJ8JwhtuVzKEn3Uif7IzIrX8/JbVhm+PyKA8js
|
||||
1NZkDzFUMnU8kA8toOOt5No48ih5/WWREXoAjFt6L/XUQW7y7SjdLO812rgeezvP
|
||||
zfz8YgQTGe3u3KVE7aoCq+IAkGqDLODZPGW4s0L6uQECgYEA92X/qB9287iefXXN
|
||||
d0wqdvJRdhg9ZAB3F4hsdPQ007OkgYQi0XcPvlRXd84gw4rFJKCes77MRHWXXc8d
|
||||
Pp9KAEAlPKjRh9rl8cKf1euGQqlsOMtzL5L5J3nAkmHE01Wn5qZeLqEFRKnCk7yx
|
||||
gUS4Vm4xYS2ZbQwOlPBwLJ7noiMCgYEAwUOi9bVrSRVe3C3m6x5ZdnDuIwnaOtMm
|
||||
e8kNfKzMtLW9JR91FuM93W8hAiwQZdgXhrC/DOFXQTn2wQQ0Wba3v209SlrqgjMT
|
||||
Rj8zX5Rn6YJVUAre/GaKDoeQBqkXif8RI4k6jcCqCtWt4slPEN52ZPezJd1lN6vr
|
||||
T0d6XbGWYkECgYEAsm4jRHtlDITT8kKbbPZHDkDYlecHp+9Z9WQUbQmQbDt9Y1gM
|
||||
0Kwhc7Fa4HKPWNjmNPOPYq4ynxF8mVD+k6LI+YNKGATeEjDDdWlcZCoZTEzrW88I
|
||||
hYBoKJt8U1cmYRG/JfBJrzG9Hfed+XW3RDdvCA8zmBYOOQLgJXWAQf5dq6cCgYEA
|
||||
muqRlO2QiyuzN0EgKfXQ9oz9hl6ebKrW3UDDK94D1RMdA8XcgLU04Ov0hJ43ort9
|
||||
2DyTWErFO4awEfZB1GwPjEWPbKvF8Qnp+FQu5P278cTEh/2+0omLPqxRudUPBlHM
|
||||
NjUJF5mJdFfmI7UESNxaAQNAuihmuyJ247zDDJmOl0ECgYEAqiIUtWSKu8A3jrx6
|
||||
wpAY7IOrOKAo9l5+WQKjtSalimlXUaEZq7r76bCZumaB3kgO+TMOaBcQoE0D3Mg6
|
||||
HEX/cNrZwO5rQkgW4/WTmZmY2xfUEIVuRDpNfDfrfQkT97P4YFjTeQxSsTWHEm/v
|
||||
d6sWvPnGGKrXR440sn7bKbydsvA=
|
||||
-----END PRIVATE KEY-----
|
||||
1
storage/wechatpay/apiv3秘钥.txt
Normal file
1
storage/wechatpay/apiv3秘钥.txt
Normal file
@ -0,0 +1 @@
|
||||
r4wu1Ms2bwApMXFwUJ7jgA5NmMJvhiyL
|
||||
23
storage/wechatpay/wechatpay.pem
Normal file
23
storage/wechatpay/wechatpay.pem
Normal file
@ -0,0 +1,23 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID3DCCAsSgAwIBAgIUQumxG9SBfqfmOjIIwGdO6nkG3vowDQYJKoZIhvcNAQEL
|
||||
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
|
||||
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
|
||||
Q0EwHhcNMjIwNjAxMDg0MjA1WhcNMjcwNTMxMDg0MjA1WjBuMRgwFgYDVQQDDA9U
|
||||
ZW5wYXkuY29tIHNpZ24xEzARBgNVBAoMClRlbnBheS5jb20xHTAbBgNVBAsMFFRl
|
||||
bnBheS5jb20gQ0EgQ2VudGVyMQswCQYDVQQGDAJDTjERMA8GA1UEBwwIU2hlblpo
|
||||
ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFuTNlYkNKkq4jahfZ
|
||||
nfNy3yARIHB5X9BODVw6uXBDGVE7lyxP8bK7IKLssmX6Ncf1oHnQdbOwThK2dVaG
|
||||
qBhDb5bQnMkQakEjZ26rqPPJUOqtHbq4nAJBWq0rm6qCFeygXkSQvZ82bmi6wPbV
|
||||
puVmmccdBadJbhP6UCciyH32gLNlparlR7amR6G/GcCu/ktwjUt9xtqilK0DJOTT
|
||||
15oGMKuSbPKBHv0/goawBc52ajUjEoVADB3KEcqd8nDtdsoMxncD/zsmXMQcZWCo
|
||||
s8JgdufhUOU0qRp1F7F27ve2TtQ879Ev5O3OvGmetp/JODRVG+x3iABkucVycNPj
|
||||
PO6VAgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DBlBgNVHR8EXjBc
|
||||
MFqgWKBWhlRodHRwOi8vZXZjYS5pdHJ1cy5jb20uY24vcHVibGljL2l0cnVzY3Js
|
||||
P0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFEMzk3NTQ5ODQ2QzAxQzNFOEVCRDIwDQYJ
|
||||
KoZIhvcNAQELBQADggEBAIQDNof+73Gr42tIwOJLgwC5ZhDmia/x/KqEl/uc2qVA
|
||||
zDCgDwnwYrmTBjjJiyIl6nOFnfAuF27mAI2253S1jpcOOWZFIR/rjErTKVTVTZaQ
|
||||
8GuMnVdw8yGzFuKuxE67Sw28JTam4xVH72ZyoSit2zZcXpkfw6Tzq+8HQxGJgCq7
|
||||
igZLk5Ot9/xG0P0Hk/G9iyTJa9g0axnJp20FaDdRES7e+B7d4S+ojQFPf4vCHvlK
|
||||
ofKLHSQOnT0fvosb08WCLTfKbcSsm1AQk1y7kgz1MkHRBVp4muG9Ybfm23z9jEjI
|
||||
lDCa6okP2gIrh3AEL5+h9/6iOCCTIxHKY83BlCi2Zro=
|
||||
-----END CERTIFICATE-----
|
||||
1
storage/wechatpay/序列号.txt
Normal file
1
storage/wechatpay/序列号.txt
Normal file
@ -0,0 +1 @@
|
||||
75B8DDD397AD6F96BF7904AE5F767C39F25E8DC1
|
||||
18
storage/wechatpay/证书使用说明.txt
Normal file
18
storage/wechatpay/证书使用说明.txt
Normal file
@ -0,0 +1,18 @@
|
||||
欢迎使用微信支付!
|
||||
附件中的三份文件(证书pkcs12格式、证书pem格式、证书密钥pem格式),为接口中强制要求时需携带的证书文件。
|
||||
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
|
||||
不同开发语言下的证书格式不同,以下为说明指引:
|
||||
证书pkcs12格式(apiclient_cert.p12)
|
||||
包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份
|
||||
部分安全性要求较高的API需要使用该证书来确认您的调用身份
|
||||
windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户号(如:1900006031)
|
||||
证书pem格式(apiclient_cert.pem)
|
||||
从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制
|
||||
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
|
||||
您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
|
||||
证书密钥pem格式(apiclient_key.pem)
|
||||
从apiclient_cert.p12中导出密钥部分的文件,为pem格式
|
||||
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
|
||||
您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
|
||||
备注说明:
|
||||
由于绝大部分操作系统已内置了微信支付服务器证书的根CA证书, 2018年3月6日后, 不再提供CA证书文件(rootca.pem)下载
|
||||
Loading…
Reference in New Issue
Block a user