love_php/app/Services/LiveAlipayService.php

355 lines
16 KiB
PHP
Raw Normal View History

2026-04-02 09:20:51 +08:00
<?php
namespace App\Services;
use App\Jobs\SendTemplateMsg;
use App\Models\Live\Viewer;
use App\Models\Live\Asset;
use App\Models\Live\AssetLog;
use Illuminate\Http\Request;
use App\library\alipay\AopClient;
use App\library\alipay\AopCertClient;
use App\library\alipay\request\AlipayFundTransUniTransferRequest;
use App\library\alipay\request\AlipayFundTransCommonQueryRequest;
use App\Http\Response\ResponseJson;
class LiveAlipayService
{
use ResponseJson;
protected $aop;
public function __construct()
{
$aop = new AopCertClient();
//应用证书路径
$appCertPath = storage_path('alipay/appCertPublicKey_2021001147602775_1.crt');
//支付宝公钥路径
$alipayCertPath = storage_path('alipay/alipayCertPublicKey_RSA2_1.crt');
//支付宝根证书路径
$rootCertPath = storage_path('alipay/alipayRootCert_1.crt');
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = env('ALIPAY_APPID');
$aop->rsaPrivateKey = env('ALIPAY_APP_SECRET');
$aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='utf-8';
$aop->format='json';
$aop->isCheckAlipayPublicCert = true;
$aop->appCertSN = $aop->getCertSN($appCertPath);//调用getCertSN获取证书序列号
// $aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);//调用getRootCertSN获取支付宝根证书序列号
$aop->alipayRootCertSN = '687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6';
$this->aop = $aop;
// dd($aop);
// $aop = new AopCertClient();
// $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
// $aop->appId = '2021001162609611';
// $aop->rsaPrivateKey = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCEdMfDKTkcAO2nhtpppfeDbMX9CCM+WGUqsvksXcfk38nZsfgY9vSSfVpAiHs7s15aw/dDwQxfEoKdZJkOc8/aAiHTL2b2nbKrXom091NYqLCMtbW8RlaptYwkX2AqrLlFgt8sSzvAbT5+QhWDCMtXRMkR4w6x2oTxwWRTNOKQLqYabz/1sCYxUnmd2eIv3j/nTyzbYnVKnYf3sXDUSaJQByPAwq+XlskrBolbqvPSbf+Qk/Bso7yBQxkF0RZALDv0skOX289gov6Lu7a92c3yMFnBqfsNV3DxyPeuruaiXSuVfgDzylZooIXAL2QTK23Jprm0xBmjhkqThJ+FB9h5AgMBAAECggEAUWlZsslukZi8eaB4NEFPPVco5doPl21LWRBB+JP3neQys3wgim+XaUZkp497dvlLQCx8mQdZrEG7SDQhovFpyoxO7/eNqHzK6Wuk5jax4qdkREgXWI4/C/ZLGbwJZpFdGq1SsG3ZXu+GXqINiMlp+cyMbVMKoCQ4XENKf53ct1McPE3WnxgN7tD9b4quuACSNNxQowT+B2UZ4vPXwO0bifiJpZUEDXcJ0OA/TuY4ryZtoiVQLrQ2sgtRbeBLFABCdIsT6rdAJ6/KRklPcUe3SPKHhsUKjkgTUlwekBDNaBEj0qX7XmKYgr2UnqtCW8FJXwZTs+wVNyTgCAPHMzWSEQKBgQDoagXxpw91tounHLa9ssCupEMowxfVjE6Z4LAgJX1wFCasuY5hPsDP6TQB3iyGx/q6i/mR0RTqQHQgRG8mXIa43xMOqb2uC41teKH0B8nDsSF7iOlqVae4Z2QmEW0ISSSW6gImwJdq7elFxSdQ1EcgkSToxT7ujreiaMwrvHortQKBgQCR5ekGBzOx5CygiQelylgKrZ3WH96TieUXsREl8cvyBndHqTK08d2mLjP35xwwAgw7TAf6bzhuMV1pRpRv3xmtvIq4dJvO4n9gke/jCyDIZu/qGrNTNVcnuYj38tevyJ7br5jR52e6JZ+Xz1u7A6MBhSeSZbmKuLe05Bg9IkEcNQKBgQCIqfeOzqanmEzsWlUWnSryRsL7ECVOvC9oCphmfsURB7hqLr6LbkQgvceIJaXXJ3bHBRIe7Ww4BuiCJNubGiNaSEpDgAp6cm6aZaoN/hpliR3gL3TZwz5Zj+py/CI6EhCC8V2MfglLplRaY4En5XthqhejDIFh8+gFh0wvl6fbVQKBgGG9I95l9Lu3oC3rnrPyWgjNRm+r6e/s8QxuEo7Y7Ue2DTJ0pwORBGvPiAELUlbXCFqxFKcw2xz29R0Rq19Glm1NYaEwfTCbi7mmCo6PZebbDt5GBNw5X6m9IYT5qoSYYdPKTxZPb63EhqWsxEcEqK7cBSaN/z5vgKIuLA7IY9YBAoGAOXCCK6bexRUF5LST3lqBOIBwB+/51yW0D17lJYtR5gLVsyEe6GWl9DPbeB1BZujUNQ+01wc59DUYQyYiekYb7399mdRyMJ/0bEADaPU3AlGAQQpoQovmz+aKdxKHnMsm7Zdy3I2v6oDcfwDYpTs+vInLY51iyj1+Vh+3+IIQ21M=';
// $aop->alipayrsaPublickey = $aop->getPublicKey(app_path().'/library/alipay/alipayCertPublicKey.crt');
// $aop->isCheckAlipayPublicCert = true;
// $aop->appCertSN = $aop->getCertSN(app_path().'/library/alipay/appCertPublicKey_2021001162609611.crt');
//// $aop->alipayRootCertSN = $aop->getRootCertSN(app_path().'/library/alipay/alipayRootCert.crt');
// $aop->alipayRootCertSN = '687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6';
// $aop->apiVersion = '1.0';
// $aop->signType = 'RSA2';
// $aop->postCharset='UTF-8';
// $aop->format='json';
//
// $this->aop = $aop;
}
public function transfer($data){
$aop = $this->aop;
$request = new AlipayFundTransUniTransferRequest ();
$request->setBizContent("{" .
"\"out_biz_no\":\"".$data['out_biz_no']."\"," .
"\"trans_amount\":".$data['amount']."," .
"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," .
"\"biz_scene\":\"DIRECT_TRANSFER\"," .
"\"mutiple_currency_detail\":{" .
"\"payment_amount\":\"100.00\"," .
"\"payment_currency\":\"CNY\"," .
"\"trans_currency\":\"CNY\"," .
"\"settlement_amount\":\"10.00\"," .
"\"settlement_currency\":\"CNY\"," .
"\"ext_info\":\"key=value\"" .
" }," .
"\"order_title\":\"直播提现\"," .
// "\"original_order_id\":\"20190620110075000006640000063056\"," .
// "\"payer_info\":{" .
// "\"identity\":\"info@ufutx.com\"," .
// "\"identity_type\":\"ALIPAY_LOGIN_ID\"," .
// "\"name\":\"福恋智能\"," .
// " }," .
"\"payee_info\":{" .
"\"identity\":\"".$data['payee_account']."\"," .
"\"identity_type\":\"ALIPAY_LOGON_ID\"," .
"\"name\":\"".$data['payee_real_name']."\"" .
" }," .
"\"remark\":\"直播余额提现到支付宝\"," .
"\"business_params\":\"{\\\"sub_biz_scene\\\":\\\"REDPACKET\\\"}\"," .
"\"passback_params\":\"{\\\"merchantBizType\\\":\\\"peerPay\\\"}\"" .
" }");
$result = $aop->execute( $request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
$log = AssetLog::where('out_biz_no', $data['out_biz_no'])->first();
if(!empty($resultCode)&&$resultCode == 10000){
$log->cash_status = 2;
$log->save();
//模板消息-提现失败通知
$log = AssetLog::select('num', 'viewer_id', 'account')->where('out_biz_no', $data['out_biz_no'])->first();
$viewer = Viewer::select('openid', 'alipay_account', 'nickname')->where('id', $log->viewer_id)->first();
$account_type = $log->account == 2 ? '支付宝账户'.$viewer->alipay_account : '微信'.$viewer->nickname;
$data['touser'] = $viewer->openid;
$data['template_id'] = 'aV4ic7jr5bOlf55CgR0jmMsFYyhdRAiVmqqXEjnUqQU';
$data['url'] = env('APP_URL').'/h5/#/myWallet';
$data['data'] = [
'first' => '您好,您的提现已到账',
'keyword1' => $log->num,
'keyword2' => date('Y-m-d H:i:s'),
'keyword3' => '提现到'.$account_type,
'reamrk' => '感谢您的使用',
];
SendTemplateMsg::dispatch($data)->onQueue('template_message');
return true;
} else {
$reason = '';
switch ($result->$responseNode->sub_code) {
case 'PAYEE_NOT_EXIST':
$reason = '支付宝账户或者真实姓名有误';
break;
case 'INVALID_PARAMETER':
$reason = '缺少支付宝或者真实姓名';
break;
default :
$reason = '系统错误';
}
$log->reason = $reason;
$log->score = $log->score + $log->num;
$log->cash_status = 3;
$log->save();
$asset = Asset::where('viewer_id', $log->viewer_id)->first();
$asset->increment('cash', $log->num);
//模板消息-提现失败通知
$log = AssetLog::select('num', 'viewer_id', 'account')->where('out_biz_no', $data['out_biz_no'])->first();
$viewer = Viewer::select('openid', 'alipay_account', 'nickname')->where('id', $log->viewer_id)->first();
$account_type = $log->account == 2 ? '支付宝账户'.$viewer->alipay_account : '微信'.$viewer->nickname;
$data['touser'] = $viewer->openid;
$data['template_id'] = 'AqwVt0liVmQfzfnX3ZGvmVOdOh62nkCbhlOUI0NVQGs';
$data['url'] = env('APP_URL').'/h5/#/myWallet';
$data['data'] = [
'first' => '您好,您的提现已到账',
'keyword1' => $log->num,
'keyword2' => '提现到'.$account_type,
'keyword3' => $reason,
'reamrk' => '请稍后重试',
];
SendTemplateMsg::dispatch($data)->onQueue('template_message');
return false;
}
}
public function transferAccount($data)
{
try {
$aop = $this->aop;
$request = new AlipayFundTransUniTransferRequest ();
$request->setBizContent("{" .
"\"out_biz_no\":\"".$data['out_biz_no']."\"," .
"\"trans_amount\":".$data['amount']."," .
"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," .
"\"biz_scene\":\"DIRECT_TRANSFER\"," .
"\"mutiple_currency_detail\":{" .
"\"payment_amount\":\"100.00\"," .
"\"payment_currency\":\"CNY\"," .
"\"trans_currency\":\"CNY\"," .
"\"settlement_amount\":\"10.00\"," .
"\"settlement_currency\":\"CNY\"," .
"\"ext_info\":\"key=value\"" .
" }," .
"\"order_title\":\"直播提现\"," .
// "\"original_order_id\":\"20190620110075000006640000063056\"," .
// "\"payer_info\":{" .
// "\"identity\":\"info@ufutx.com\"," .
// "\"identity_type\":\"ALIPAY_LOGIN_ID\"," .
// "\"name\":\"福恋智能\"," .
// " }," .
"\"payee_info\":{" .
"\"identity\":\"".$data['payee_account']."\"," .
"\"identity_type\":\"ALIPAY_LOGON_ID\"," .
"\"name\":\"".$data['payee_real_name']."\"" .
" }," .
"\"remark\":\"".$data['remark']."\"," .
"\"business_params\":\"{\\\"sub_biz_scene\\\":\\\"REDPACKET\\\"}\"," .
"\"passback_params\":\"{\\\"merchantBizType\\\":\\\"peerPay\\\"}\"" .
" }");
if (env('APP_ENV') != 'production') {
return true;
}
$result = $aop->execute( $request);
$result = $result->alipay_fund_trans_uni_transfer_response;
if(!empty($result)&&$result->code == 10000){
return true;
}else{
return ['code'=>1, 'msg'=>$result->sub_msg];
}
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
//查询订单
public function info($data){
$aop = $this->aop;
$request = new AlipayFundTransCommonQueryRequest ();
$request->setBizContent("{" .
"\"product_code\":\"STD_RED_PACKET\"," .
"\"biz_scene\":\"PERSONAL_PAY\"," .
"\"out_biz_no\":\"".$data['out_biz_no']."\"," .
"\"order_id\":\"".$data['order_id']."\"," .
"\"pay_fund_order_id\":\"".$data['pay_fund_order_id']."\"" .
" }");
$result = $aop->execute ( $request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
return $result;
} else {
return $result;
}
}
//商家版支付宝提现
public function platTransferAccount($data)
{
try {
$aop = $this->aop;
$request = new AlipayFundTransUniTransferRequest ();
$request->setBizContent("{" .
"\"out_biz_no\":\"".$data['out_biz_no']."\"," .
"\"trans_amount\":".$data['amount']."," .
"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," .
"\"biz_scene\":\"DIRECT_TRANSFER\"," .
"\"mutiple_currency_detail\":{" .
"\"payment_amount\":\"100.00\"," .
"\"payment_currency\":\"CNY\"," .
"\"trans_currency\":\"CNY\"," .
"\"settlement_amount\":\"10.00\"," .
"\"settlement_currency\":\"CNY\"," .
"\"ext_info\":\"key=value\"" .
" }," .
"\"order_title\":\"商家版现金提现\"," .
// "\"original_order_id\":\"20190620110075000006640000063056\"," .
// "\"payer_info\":{" .
// "\"identity\":\"info@ufutx.com\"," .
// "\"identity_type\":\"ALIPAY_LOGIN_ID\"," .
// "\"name\":\"福恋智能\"," .
// " }," .
"\"payee_info\":{" .
"\"identity\":\"".$data['payee_account']."\"," .
"\"identity_type\":\"ALIPAY_LOGON_ID\"," .
"\"name\":\"".$data['payee_real_name']."\"" .
" }," .
"\"remark\":\"".$data['remark']."\"," .
"\"business_params\":\"{\\\"sub_biz_scene\\\":\\\"REDPACKET\\\"}\"," .
"\"passback_params\":\"{\\\"merchantBizType\\\":\\\"peerPay\\\"}\"" .
" }");
// if (env('APP_ENV') != 'production') {
// return true;
// }
$result = $aop->execute( $request);
$result = $result->alipay_fund_trans_uni_transfer_response;
if(!empty($result)&&$result->code == 10000){
return true;
}else{
return ['code'=>1, 'msg'=>$result->sub_msg, 'aliapy_code'=>$result->code];
}
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
// 商家版支付宝提现-用户id
public function UserTransferAccount($data)
{
try {
$aop = $this->aop;
$request = new AlipayFundTransUniTransferRequest ();
$request->setBizContent("{" .
"\"out_biz_no\":\"".$data['out_biz_no']."\"," .
"\"trans_amount\":".$data['amount']."," .
"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," .
"\"biz_scene\":\"DIRECT_TRANSFER\"," .
"\"mutiple_currency_detail\":{" .
"\"payment_amount\":\"100.00\"," .
"\"payment_currency\":\"CNY\"," .
"\"trans_currency\":\"CNY\"," .
"\"settlement_amount\":\"10.00\"," .
"\"settlement_currency\":\"CNY\"," .
"\"ext_info\":\"key=value\"" .
" }," .
"\"order_title\":\"商家版现金提现\"," .
"\"payee_info\":{" .
"\"identity\":\"".$data['payee_account']."\"," .
"\"identity_type\":\"ALIPAY_USER_ID\"," .
" }," .
"\"remark\":\"".$data['remark']."\"," .
"\"business_params\":\"{\\\"sub_biz_scene\\\":\\\"REDPACKET\\\"}\"," .
"\"passback_params\":\"{\\\"merchantBizType\\\":\\\"peerPay\\\"}\"" .
" }");
// if (env('APP_ENV') != 'production') {
// return true;
// }
$result = $aop->execute( $request);
$result = $result->alipay_fund_trans_uni_transfer_response;
if(!empty($result)&&$result->code == 10000){
return true;
}else{
return ['code'=>1, 'msg'=>$result->sub_msg];
}
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
// 获取阿里云用户信息
public function AlipayUserInfo($auth_code)
{
$c = $this->aop;
$code = $auth_code;
$request = new \AlipaySystemOauthTokenRequest();
$request->setGrantType("authorization_code");
$request->setCode($code);
$result = $c->execute($request);
if(!isset($result->alipay_system_oauth_token_response)){
return false;
}
$accessToken = $result->alipay_system_oauth_token_response->access_token;
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称alipay.user.userinfo.share
$request= new \AlipayUserInfoShareRequest();
//授权类接口执行API调用时需要带上accessToken
$result= $c->execute($request,$accessToken);
$user = $result->alipay_user_info_share_response;
return $user;
}
}