6
0
Fork 0

支付宝退款

release
李静 2022-01-04 20:20:15 +08:00
parent 1b8de36a8d
commit c002f70ed9
3 changed files with 59 additions and 4 deletions

View File

@ -6,6 +6,7 @@ use App\Exceptions\BizException;
use App\Models\BalanceLog;
use App\Models\OrderRefundLog;
use App\Models\WalletLog;
use App\Services\AlipayService;
use App\Services\BalanceService;
use App\Services\WalletService;
use App\Services\WeChatPayService;
@ -87,6 +88,29 @@ class OrderRefundCommand extends Command
]);
}
/**
* 支付宝退款
*
* @param \App\Models\OrderRefundLog $log
* @return void
*/
protected function refundByAlipay(OrderRefundLog $log)
{
$order = $log->order;
(new AlipayService())->refund(
$order->pay_sn,
$log->sn,
bcdiv($log->amount, 100, 2),
$log->reason,
);
$log->update([
'status' => OrderRefundLog::STATUS_SUCCESS,
'failed_reason' => null,
]);
}
/**
* 可提支付退款
*

View File

@ -5,8 +5,10 @@ namespace App\Services;
use Alipay\EasySDK\Kernel\CertEnvironment;
use Alipay\EasySDK\Kernel\Config;
use Alipay\EasySDK\Kernel\EasySDKKernel;
use Alipay\EasySDK\Kernel\Util\ResponseChecker;
use Alipay\EasySDK\Payment\App\Client as AppClient;
use Alipay\EasySDK\Payment\Common\Client as CommonClient;
use App\Exceptions\BizException;
class AlipayService
{
@ -20,17 +22,44 @@ class AlipayService
{
$kernel = $this->getKernel();
$result = (new AppClient($kernel))->pay(
$response = (new AppClient($kernel))->pay(
$params['subject'],
$params['out_trade_no'],
$params['total_amount'],
);
return [
'body' => $result->body,
'body' => $response->body,
];
}
/**
* 退款
*
* @param string $outTradeNo
* @param string $refundSerialNumber
* @param float $refundAmount
* @param string $refundReason
* @return array
*/
public function refund(
string $outTradeNo,
string $refundSerialNumber,
$refundAmount,
?string $refundReason = null
) {
$kernel = $this->getKernel();
$response = (new CommonClient($kernel))
->optional('out_request_no', $refundSerialNumber)
->optional('refund_reason', $refundReason)
->refund($outTradeNo, $refundAmount);
if (! (new ResponseChecker())->success($response)) {
throw new BizException($response->msg.''.$response->subMsg);
}
}
/**
* 验证回调通知
*
@ -72,7 +101,7 @@ class AlipayService
$cfg->merchantCertPath = $configs['app_public_cert_path'];
$cfg->alipayCertPath = $configs['public_cert_path'];
$cfg->alipayRootCertPath = $configs['root_cert_path'];
$cfg->notifyUrl = $configs['notify_url'] ?? url(route('alipay.notify', [], false), [], true);
$cfg->notifyUrl = 'https://zichunsheng.cn/callback/alipay' ?? url(route('alipay.notify', [], false), [], true);
$certEnvironment = new CertEnvironment();
$certEnvironment->certEnvironment(

View File

@ -76,6 +76,9 @@ class PayService
} elseif ($payLog->isBalance()) {
// 余额支付
$payWay = Order::PAY_WAY_BALANCE;
} elseif ($payLog->isAlipay()) {
// 支付宝
$payWay = Order::PAY_WAY_ALIPAY;
}
$payable->update([
@ -84,7 +87,6 @@ class PayService
'pay_at' => $payLog->pay_at,
'out_trade_no' => $payLog->out_trade_no,
'status' => Order::STATUS_PAID,
'auto_complete_at' => now()->addDays(app_settings('app.order_auto_complete_days', 7)),
]);
// 增加用户的预成长值