<?php
use AopCertClient;
use think\Controller;
use think\Request;
class AliSub
{
//支付宝分账
/**
* 资料部分
* 1.证书类型:公钥证书模式
* 2.申请分账产品---支付宝商户平台(资金-分账)
* 3.提升分账额度---申请分账产品完成之后提升分账额度
* 4.应用公钥证书--app_cert_public_key
* 5.支付宝根证书--alipay_root_cert
* 6.支付宝公钥--ali_public_key
* 7.文档 https://opendocs.alipay.com/open/repo-0038ln?ref=api
* 8.sdk--v2--Alipay SDK(通用版也叫alipay-sdk-php-all)(extend/aop)
* 9.appId--商户号
* 10.应用私钥--private_key
*/
/**
* @return AopCertClient
* 提取公共部分
*/
public function getC(): AopCertClient
{
$c = new AopCertClient;
$appCertPath = '应用公钥证书的路径';
$alipayCertPath = '支付宝公钥证书路径';
$rootCertPath = '支付宝根证书路径';
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";//写死
$c->appId = "2021****6**83902";//商户号
$c->rsaPrivateKey = '应用私钥内容,不是路径,不带begin的内容';
$c->format = "json";
$c->charset = "utf-8";
$c->signType = "RSA2";
//调用getPublicKey从支付宝公钥证书中提取公钥
$c->alipayrsaPublicKey = $c->getPublicKey($alipayCertPath);
//是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内
$c->isCheckAlipayPublicCert = false;
//调用getCertSN获取证书序列号
$c->appCertSN = $c->getCertSN($appCertPath);
//调用getRootCertSN获取支付宝根证书序列号
$c->alipayRootCertSN = $c->getRootCertSN($rootCertPath);
return $c;
}
/**
* 添加分账接收方
*/
public function addAliMember($data)
{
$c = $this->getC();
$request = new \AlipayTradeRoyaltyRelationBindRequest();
$info = [
'receiver_list' => $data,
'out_request_no' => '请求单号保证唯一性',
];
$request->setBizContent(json_encode($info));
$response= $c->execute($request);
$a = json_encode($response);
return json_decode($a,true);
}
/**
* @title 删除分账接收方
* alipay.trade.royalty.relation.unbind
*/
public function deleteMember($aliPaySubMemberArray)
{
$c = $this->getC();
$data = [];
foreach ($aliPaySubMemberArray as $k => $v) {
$data[$k]['type'] = 'userId';
$data[$k]['account'] = $v['account'];
}
$request = new \AlipayTradeRoyaltyRelationUnbindRequest();
$info = [
'receiver_list' => $data,
'out_request_no' => '请求单号保证唯一性'
];
$request->setBizContent(json_encode($info));
try {
$response = $c->execute($request);
}catch ( \Throwable $e){halt($e);}
$a = json_encode($response);
return json_decode($a,true);
}
/**
* @title 查询分账接收方
* alipay.trade.royalty.relation.batchquery
*/
public function subMember()
{
$c = $this->getC();
$request = new \AlipayTradeRoyaltyRelationBatchqueryRequest ();
$info = [
'out_request_no' => '123456',
];
$request->setBizContent(json_encode($info));
try {
$response = $c->execute($request);
}catch ( \Throwable $e){halt($e);}
$a = json_encode($response);
return json_decode($a,true);
}
/**
* @title 分账
* alipay.trade.order.settle
*/
public function sub($orderInfo)
{
$c = $this->getC();
$request = new \AlipayTradeOrderSettleRequest ();
$data = [];
if ($orderInfo->status == 2) {
//业务逻辑
$data = [
'trans_in_type' => 'loginName',
'trans_in' => '手机号或者邮箱',
'amount' => '返佣金额',//单位为元
'desc' => '返佣'
];
}
$info = [
'out_request_no' => '请求分账的订单号',//请求分账的单号,自己生成的,这个需要存下来
'trade_no' => $orderInfo->ali_order_num,//对A订单进行分账,A订单的订单号(这个订单号是支付宝生成的订单号)
'royalty_parameters' => $data,
'royalty_mode' => 'sync'//不传默认同步执行
];
$request->setBizContent(json_encode($info));
try {
$response = $c->execute($request);
}catch ( \Throwable $e){halt($e);}
$a = json_encode($response);
return json_decode($a,true);
}
/**
* @title 查询分账结果
* alipay.trade.order.settle.query
*/
public function subInfo()
{
$c = $this->getC();
$request = new \AlipayTradeOrderSettleQueryRequest ();
$info = [
'settle_no' => '20220722002530020007170379270291'
];
$request->setBizContent(json_encode($info));
try {
$result = $c->execute($request);
}catch ( \Throwable $e){halt($e);}
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
echo "成功";
} else {
echo "失败";
}
}
}
aop 支付宝扩展
最后检测日期:2023/10/09
