Laravel 开发支付宝支付与提现转账问题小结
由于项目需要,所以需要开发支付宝支付与微信支付,支付部分采用了
yansongda/pay https://packagist.org/packages/yansongda/pay https://yansongda.gitbooks.io/pay/(文档说明地址)
第三方扩展包 , 简单配置一下就可以使用,没有遇到什么问题
但是由于业务需要, 需要用到提现业务,也就是支付宝支付的
alipay.fund.trans.toaccount.transfer(单笔转账到支付宝账户接口)
找了很久也没有找到很简单的集成支付宝单笔转账接口的扩展包,所以没办法只能自己来用支付宝给的SDK进行开发
首先下载了支付宝服务端SDK PHP版 下载地址https://docs.open.alipay.com/54/103419/
然后解压添加进项目目录 app\Libs\Alipay Libs为自己建的目录,用来装第三方类库
之后打开composer.json文件 在autoload里面的classmap里面添加入新添加的SDK
"autoload": {
"classmap": [
"database/seeds",
"database/factories",
"app/Libs/Alipay-php-sdk"
],
"psr-4": {
"App\\": "app/"
},
。。。。。。
之后再执行composer dump-autoload 这样第三方的SDK就引入成功了
然后在控制器或者自己定义的业务层中就可以直接use这个SDK了 在new 类的时候会在前面出现 \ 属于正常
然后将给出的PHP示例粘贴进自己的业务代码中 点击查看官方请求示例https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer#s4
注意事项:
1、粘贴到自己的业务逻辑中之后 所有new的类必须删除自己手打引入 比如: AopClient() 、 AlipayFundTransToaccountTransferRequest() 否则会爆出class not found 等错误
2、按照说明配置所有参数之后,请求会爆出 “ 文件编码:[UTF-8] 与表单提交编码:[GBK]两者不一致!”错误,只要将复制的代码中 $aop->postCharset 值的GBK修改成为UTF-8即可
3、支付宝SDK与Laravel都自定义了encrypt与decrypt函数,所以会产生冲突,只要将支付宝SDK中的 \aop\AopClient.php \aop\AopEncrypt.php \lotusphp_runtime\Cookie\Cokkie.php 下的这两个函数全部重新命名即可,注意所有的 包括引用函数 直接在编辑器中查找替换也可以。
然后根据自己的业务来进行修改就可以了
如果爆出 “$sign”错误,请检查自己的公钥、私钥、AppID等是否正确,如果使用沙箱测试,请将网关修改为
$aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';
最后贴上自己的代码,欢迎指教
/*
*支付宝提现接口
*/
public function toTransfer($orderNo, $account, $amount, $payName, $payeeRealName, $remark)
{
$aop = new \AopClient();
$aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';
$aop->appId = config('Alipay.AppId');
$aop->rsaPrivateKey = config('Alipay.PriKey');
$aop->alipayrsaPublicKey = config('Alipay.PubKey');
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'UTF-8';
$aop->format = 'json';
$request = new \AlipayFundTransToaccountTransferRequest ();
$request->setBizContent("{" .
"\"out_biz_no\":\"$orderNo\"," .
"\"payee_type\":\"ALIPAY_LOGONID\"," .
"\"payee_account\":\"$account\"," .
"\"amount\":\"$amount\"," .
"\"payer_show_name\":\"$payName\"," .
"\"payee_real_name\":\"$payeeRealName\"," .
"\"remark\":\"$remark\"" .
"}");
$result = $aop->execute($request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $resultCode = $result->$responseNode->code; if (!empty($resultCode) && $resultCode == 10000) {
echo "成功";
} else {
echo "失败";
}
}
最新文章
- C#多线程之基础篇3
- Linux工具快速教程
- Django基础之wsgi
- 深入理解Java的接口和抽象类(转)
- Meta标签介绍
- SQL Server高级查询
- Leetcode 134 Gas Station
- JavaScript——this关键字
- Android Studio使用教程(二)
- hdu 2084 数塔(动态规划)
- 15、Jdbc的优化(BeanUtils组件)
- 如何在XML 加入特殊字符内容 如<; >;
- windows下设置/删除Tomcat的开机自启动
- 【Android进阶】Activity的四种加载模式
- poi 合并单元格、设置边框
- Lucene 5.X 版本索引文件格式
- Spring Boot面试题
- vue 实践记录
- vue-cli 项目实现路由懒加载
- 【Vue.js】vue引入组件报错:该组件未注册?
热门文章
- mac和windows自动清理内存工具
- 两步让你的mobile traffic通过fiddler代理传送
- MySQL案例01:Last_SQL_Errno: 1755 Cannot execute the current event group in the parallel mode
- 使用UIWebView中html标签显示富文本
- 根据ip抓 包
- Python学习---匿名函数和闭包的学习
- HTML和CSS实现常见的布局
- 2018.09.23模拟总结(T2)
- Libevent源码学习笔记一:event2/event.h
- 机器学习之感知器算法原理和Python实现