Sivo 悉见

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即可。