支付宝 单笔转账到支付宝账户接口 - 提现
实现用户提现 资金自动到账
如果能够实现到提现这一步,前期的配置什么的都应该做好了,这里就不赘述了。
当前开发环境:
Windows
phpstudy
ThinkPHP5
实现提现的步骤
1 开发者平台进行签约
2 找到开发文档
3 实际开发测试
1 签约
登录支付宝开放平台,进入开发者中心->选择需要对接的APP应用->找到下图界面,进行添加 单笔转账到支付宝账号 功能,然后签约,
2 找到开发文档,
一般我们使用的都是支付 退款功能,这些api 都是在支付api里列表中的,
而单笔转账是在资金api中的,我找了好一会才找到
3 实际开发
在 https://docs.open.alipay.com/54/103419/ 中下载最新demo
把demo放入到 extend 目录下
3.1 引入核心文件
Loader::import('alipay.aop.AopClient',EXTEND_PATH,'.php');
Loader::import('alipay.aop.request.AlipayFundTransToaccountTransferRequest',EXTEND_PATH,'.php');
Loader::import('alipay.aop.SignData',EXTEND_PATH,'.php');
3.2 提现函数
根据文档的说明,提现也是需要一个唯一的编号 来标识当前这笔转账交易记录的,需要一个表进行记录
/** * @User 一秋 * @param $userid 用户id * @param $out_biz_no 编号 * @param $payee_account 提现的支付宝账号 * @param $amount 转账金额 * @param $payee_real_name 账号的真实姓名 * @return bool|Exception */ public static function userWithDraw( $userid,$out_biz_no,$payee_account,$amount,$payee_real_name) { $payer_show_name = '用户红包提现'; $remark = '红包提现到支付宝'; $aop = new \AopClient(); $aop->gatewayUrl = config('alipay.gatewayUrl');//支付宝网关 https://openapi.alipay.com/gateway.do这个是不变的 $aop->appId = config('alipay.appId');//商户appid 在支付宝控制台找 $aop->rsaPrivateKey = config('alipay.rsaPrivateKey');//私钥 工具生成的 $aop->alipayrsaPublicKey=config('alipay.alipayrsaPublicKey');//支付宝公钥 上传应用公钥后 支付宝生成的支付宝公钥 $aop->apiVersion = '1.0'; $aop->signType = 'RSA2'; $aop->postCharset='utf-8'; $aop->format='json'; $request = new \AlipayFundTransToaccountTransferRequest(); $request->setBizContent("{" . "\"out_biz_no\":\"$out_biz_no\"," . "\"payee_type\":\"ALIPAY_LOGONID\"," . "\"payee_account\":\"$payee_account\"," . "\"amount\":\"$amount\"," . "\"payer_show_name\":\"$payer_show_name\"," . "\"payee_real_name\":\"$payee_real_name\"," . "\"remark\":\"$remark\"" . "}"); $result = $aop->execute ($request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $resultCode = $result->$responseNode->code; if(!empty($resultCode)&&$resultCode == 10000){ //提现成功以后 更新表状态 //并且记录 流水等等 return true; } else { //$result->$responseNode->sub_msg 这个参数 是返回的错误信息 throw new Exception($result->$responseNode->sub_msg); } }