Laravel集成支付宝支付接口的方法(2018-3-18)
匿名 · 更新于 2018/3/18
第一种方法(require)
在Controller中引入自定义的php文件,先在app目录下创建一个新的文件夹,命名Library(可自定义),接着将下载支付宝提供的PHP SDK,解压后放到Library目录下,目录名重命名为alipay,然后在需要支付宝支付接口的地方使用,下面以PHP服务端为App客户端生成订单支付所需信息接口为例:
<?php
class MyTest {
public function getPaymentSignature(){
require '../app/Library/alipay/aop/request/AlipayTradeAppPayRequest.php';
require '../app/Library/alipay/aop/AopClient.php';
$aop = new \AopClient;
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = "app_id";
$aop->rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串';
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = '请填写支付宝公钥,一行字符串';
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent = "{\"body\":\"我是测试数据\","
. "\"subject\": \"App支付测试\","
. "\"out_trade_no\": \"20170125test01\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"0.01\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}";
$request->setNotifyUrl("http://yapi.lejiug.com/api/alipayCallBack.api");
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
echo htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。
}
}
记住实例化一个类的时候前面不要忘记加 反斜杠 '\',否则会提示找不到该路径,因为laravel默认是在Controller里找的。
这样就可以随时的在项目中使用第三方类库了。
支付宝密钥生成工具下载
可能遇到的错误解决:
Laravel5使用AlipaySDK加密解密函数名称冲突错误 Cannot redeclare Encrypt() (previously declared in .../vendor/laravel/lumen-framework/src/helpers.php:126)
错误现象:
在Laravel5中,直接引入alipay时,会报这个错误:
Cannot redeclare Encrypt() (previously declared in .../vendor/laravel/lumen-framework/src/helpers.php:126)
或
Cannot redeclare Decrypt() (previously declared in .../vendor/laravel/lumen-framework/src/helpers.php:126)
报错原因:
alipaySDK中定义的Encrypt()/Decrypt()函数与Laravel中定义的Encrypt()/Decrypt()函数重名了。
解决办法:
修改alipaySDK中定义的函数名称、修改引用的函数名称。
解决步骤:
在官方给的SDK中,一共有需要修改三个文件中的内容:
aop/AopEncrypt.php
aop/AopClient.php
lotusphp_runtime/Cookie/Cookie.php
在文件中查找encrypt/decrypt替换为alipayEncrypt/alipayDecrypt即可。
