You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.7 KiB

5 years ago
<?php
namespace App\Libs;
use Alipay\EasySDK\Kernel\Factory;
use Alipay\EasySDK\Kernel\Util\ResponseChecker;
use Alipay\EasySDK\Kernel\Config;
5 years ago
use App\Events\RechargeSucceed;
use App\Models\Recharge;
5 years ago
use Illuminate\Support\Facades\Log;
5 years ago
class AlipayF2F
{
5 years ago
public function pay(Recharge $recharge)
5 years ago
{
try {
$auth_code = request()->auth_code;
5 years ago
$config = $this->getOptions();
5 years ago
$result = Factory::setOptions($config)::payment()
->faceToFace()
->pay("充值{$recharge->money}元", $recharge->serial, $recharge->money, $auth_code);
5 years ago
$responseChecker = new ResponseChecker();
//处理响应或异常
if ($responseChecker->success($result)) {
5 years ago
$transaction_id = $result->tradeNo;
5 years ago
$update = [
"paid_at" => date("Y-m-d H:i:s"),
5 years ago
"payment_serial" => $transaction_id
5 years ago
];
$recharge->update($update);
//充值成功后处理
event(new RechargeSucceed($recharge));
5 years ago
return [
"status" => true
];
} else {
5 years ago
Log::info("支付宝错误:" . $result->code . "" . $result->msg . "" . $result->subMsg);
5 years ago
return [
"status" => false,
"code" => $result->code,
5 years ago
"msg" => $result->msg . "" . $result->subMsg
5 years ago
];
}
} catch (\Exception $exception) {
return [
"status" => false,
"code" => $exception->getCode(),
"msg" => $exception->getMessage()
];
}
}
public function getOptions()
{
$options = new Config();
$options->protocol = 'https';
$options->gatewayHost = 'openapi.alipay.com';
$options->signType = 'RSA2';
5 years ago
// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
5 years ago
$options->merchantPrivateKey = env("ALI_APP_PRIVATE_KEY");
5 years ago
5 years ago
$options->appId = env("ALI_APP_ID");
5 years ago
//$options->alipayCertPath = env("ALI_CERT_ALIPAY");
//$options->alipayRootCertPath = env("ALI_CERT_ROOT");
//$options->merchantCertPath = env("ALI_CERT_APP");
5 years ago
//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
5 years ago
$options->alipayPublicKey = env("ALI_ALIPAY_KEY");
5 years ago
//可设置异步通知接收服务地址(可选)
$options->notifyUrl = "";
//可设置AES密钥调用AES加解密相关接口时需要可选
$options->encryptKey = "";
return $options;
}
}