getKernel(); $response = (new AppClient($kernel))->pay( $params['subject'], $params['out_trade_no'], $params['total_amount'], ); return [ '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); } } /** * 验证回调通知 * * @param array $parameters * @return bool */ public function verifyNotify(array $parameters = []): bool { $client = new CommonClient($this->getKernel()); return $client->verifyNotify($parameters); } /** * App 支付客户端 * * @return EasySDKKernel */ public function getKernel(): EasySDKKernel { return new EasySDKKernel($this->getConfig()); } /** * 获取支付宝配置信息 * * @return \Alipay\EasySDK\Kernel\Config */ protected function getConfig(): Config { $configs = config('alipay'); $cfg = new Config(); $cfg->protocol = 'https'; $cfg->gatewayHost = 'openapi.alipay.com'; $cfg->signType = 'RSA2'; $cfg->appId = $configs['app_id']; $cfg->merchantPrivateKey = $configs['app_private_key']; $cfg->merchantCertPath = $configs['app_public_cert_path']; $cfg->alipayCertPath = $configs['public_cert_path']; $cfg->alipayRootCertPath = $configs['root_cert_path']; $cfg->notifyUrl = url(route('alipay.notify', [], false), [], true); $certEnvironment = new CertEnvironment(); $certEnvironment->certEnvironment( $cfg->merchantCertPath, $cfg->alipayCertPath, $cfg->alipayRootCertPath ); $cfg->merchantCertSN = $certEnvironment->getMerchantCertSN(); $cfg->alipayRootCertSN = $certEnvironment->getRootCertSN(); $cfg->alipayPublicKey = $certEnvironment->getCachedAlipayPublicKey(); return $cfg; } }