使用PHP编写支付宝企业账户向个人账户转账的接口代码
以下是使用PHP编写的支付宝企业账户转账个人账户接口代码示例: ```php <?php // 引入支付宝SDK require_once 'Alipay/autoload.php'; // 配置参数 $config = array( 'app_id' => '你的应用ID', 'merchant_private_key' => '你的商户私钥', 'alipay_public_key' => '支付宝公钥', 'notify_url' => '异步通知地址', 'return_url' => '同步返回地址', 'charset' => 'utf-8', 'sign_type' => 'RSA2', 'debug' => false, ); // 创建Alipay对象 $alipay = new Alipay($config); // 设置转账参数 $transferParams = array( 'out
前言
支付宝企业账户转账个人账户php接口代码,该接口主要用于平台对用户奖励的发放,场景也很简单就是我在你平台上有余额,我提现,平台给钱。
只不过项目中是用的官方的SDK调用的,仔细看了下那个SDK目录,把很多无用的接口(目前自己用不上)也包含在里面,作为强迫症的自己,想着精简一番。
注意
因为使用时间比较长,这里用的是转账的老接口,停止更新了,目前还能正常使用。
需要企业支付宝才能签约
收款账号必填,收款姓名可以不填,但是如果当账号对应多个名字的时候,会提示完善姓名,否则找不到哪个账号,我也不知道为啥一个账号会对应多个姓名这种,可能是支付宝前期账号和手机号没有处理好吧。
付款方(企业方)可以自定义显示的名称,比如企业名称太长想简化可以设置payer_show_name参数
当一个账号在某个很短的时间内,频繁提现相同金额,会触发支付宝的风控,因此 在调用该接口时一定要做好访问频率(同账号,同ip)限制。涉及到金钱的一定要把细节做好。
php代码
<?phpheader('Content-type:text/html;Charset=utf-8');//sdk单笔转账接口https://opendocs.alipay.com/apis/api_28/alipay.fund.trans.uni.transferClassAliTransferPay{public$appId;public$privateKey;public$charset;public$sign_type;publicfunction__construct($appId,$privateKey){$this->appId=$appId;$this->privateKey=$privateKey;$this->charset='utf-8';$this->sign_type='RSA2';}/***查询余额,需要签约改功能,如果不能签约的话会提示ISV权限不足,建议在开发者中心检查签约是否已经生效*home.php?mod=space&uid=155549mixed*/publicfunctionqueryBalance(){$reqParams=['app_id'=>$this->appId,'method'=>'alipay.data.bill.balance.query','format'=>'JSON','charset'=>$this->charset,'sign_type'=>$this->sign_type,'timestamp'=>date('Y-m-dH:i:s'),'version'=>'1.0',];//格式化编码$bizParmsStr=$this->getSignContent($reqParams);//计算签名$sign=$this->getSign($bizParmsStr,$this->sign_type);$reqParams['sign']=$sign;//发送请求$result=$this->curlPost('https://openapi.alipay.com/gateway.do?charset='.$this->charset,$reqParams);returnjson_decode($result,true);}/***转账方法*home.php?mod=space&uid=952169$order_idstring订单号*@param$pricestring价格*@param$accountstring收款方账户账号*@param$payee_real_namestring收款方账户姓名可以不传*@paramstring$remarkstring支付备注*@paramstring$payer_show_name转账企业支付时显示的名称*@returnmixed*/publicfunctionpay($order_id,$price,$account,$payee_real_name,$remark='测试',$payer_show_name='测试'){$bizParms=['out_biz_no'=>$order_id,'payee_type'=>'ALIPAY_LOGONID',//固定值,老接口'payee_account'=>$account,'payee_real_name'=>$payee_real_name,//收款方姓名(选填)'amount'=>$price,//转账金额'remark'=>$remark,//转账备注(选填)'payer_show_name'=>$payer_show_name,//支付方名称,比如我不想显示公司名称太长了,可以自定义这个名称];$reqParams=['app_id'=>$this->appId,'method'=>'alipay.fund.trans.toaccount.transfer','format'=>'JSON','charset'=>$this->charset,'sign_type'=>$this->sign_type,'timestamp'=>date('Y-m-dH:i:s'),'version'=>'1.0','biz_content'=>json_encode($bizParms),];//格式化编码$bizParmsStr=$this->getSignContent($reqParams);//计算签名$sign=$this->getSign($bizParmsStr,$this->sign_type);$reqParams['sign']=$sign;//发送请求$result=$this->curlPost('https://openapi.alipay.com/gateway.do?charset='.$this->charset,$reqParams);returnjson_decode($result,true);}/***根据加密类型,进行参数加密*@param$paramsstring*@paramstring$sign_type该函数只支持RSA和RSA2两种方式*@returnstring*/publicfunctiongetSign($params,$sign_type="RSA"){$privateKey=$this->privateKey;$formatPrivateKey="-----BEGINRSAPRIVATEKEY-----n".wordwrap($privateKey,64,"n",true)."n-----ENDRSAPRIVATEKEY-----";($formatPrivateKey)ordie('您使用的私钥格式错误,请检查RSA私钥配置');if($sign_type=='RSA2'){openssl_sign($params,$sign,$formatPrivateKey,version_compare(PHP_VERSION,'5.4.0','<')?SHA256:OPENSSL_ALGO_SHA256);//OPENSSL_ALGO_SHA256是php5.4.8以上版本才支持}else{openssl_sign($params,$sign,$formatPrivateKey);}returnbase64_encode($sign);}/***获取待签名的字符串*@param$params*@returnstring*/publicfunctiongetSignContent($params){ksort($params);$stringToBeSigned="";$i=0;foreach($paramsas$k=>$v){if(false===$this->checkEmpty($v)&&"@"!=substr($v,0,1)){//转换成目标字符集$v=$this->transCoding($v,$this->charset);if($i==0){$stringToBeSigned.="$k"."="."$v";}else{$stringToBeSigned.="&"."$k"."="."$v";}$i++;}}unset($k,$v);return$stringToBeSigned;}/***转换字符集编码*@param$data*@param$targetCharset*@returnstring*/functiontransCoding($data,$targetCharset){if(!empty($data)){$fileType=$this->charset;if(strcasecmp($fileType,$targetCharset)!=0){$data=mb_convert_encoding($data,$targetCharset,$fileType);}}return$data;}/***校验参数是否为空*@param$value*@returnbool*/protectedfunctioncheckEmpty($value){returnempty($value)==true;}/***curl请求,注意https如果没有证书,需要设置不验证证书和host*@paramstring$url*@paramstring$postData*@paramarray$options*@parambool$isssl*@returnmixed*/publicfunctioncurlPost($url='',$postData='',$options=[],$isssl=true){if(is_array($postData)){$postData=http_build_query($postData);}$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$postData);curl_setopt($ch,CURLOPT_TIMEOUT,30);if(!empty($options)){curl_setopt_array($ch,$options);}//https请求不验证证书和hostif($isssl){curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);}$data=curl_exec($ch);curl_close($ch);return$data;}}//转账functioninvoke(){//调用测试$appid='';$order_id=uniqid();$price=0.1;$saPrivateKey='';$account='';//收款方账号$payee_real_name='';//收款方真实姓名$aliPay=newAliTransferPay($appid,$saPrivateKey);$result=$aliPay->pay($order_id,$price,$account,$payee_real_name);$result=$result['alipay_fund_trans_toaccount_transfer_response'];if($result['code']&&$result['code']=='10000'){echo'转账成功';}else{echo$result['msg'].':'.$result['sub_msg'];}}invoke();