6
0
Fork 0
jiqu-library-server/app/Services/AlipayService.php

90 lines
2.3 KiB
PHP

<?php
namespace App\Services;
use Alipay\EasySDK\Kernel\CertEnvironment;
use Alipay\EasySDK\Kernel\Config;
use Alipay\EasySDK\Kernel\EasySDKKernel;
use Alipay\EasySDK\Payment\App\Client as AppClient;
use Alipay\EasySDK\Payment\Common\Client as CommonClient;
class AlipayService
{
/**
* 支付
*
* @param array $params
* @return array
*/
public function pay(array $params)
{
$kernel = $this->getKernel();
$result = (new AppClient($kernel))->pay(
$params['subject'],
$params['out_trade_no'],
$params['total_amount'],
);
return [
'body' => $result->body,
];
}
/**
* 验证回调通知
*
* @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 = $configs['notify_url'] ?? 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;
}
}