<?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