一, 创建应用及配置
首先需要到蚂蚁金服开放平台 (https://docs.open.alipay.com/) 注册应用, 获取应用 id(APP_ID), 并且配置应用, 主要是签约应用, 这个需要审核, 一般 2-5 个工作日, 审核通过后, 去生成公钥私钥这些东西, 具体步骤参考蚂蚁金服官方文档, 上面说明的比较清楚;
二, 下载对应 SDK
下载的是服务端 SDK, 注意不要下错, 下载地址: https://docs.open.alipay.com/54/103419/ ;
三, 准备好域名
这个一般都已经有了吧.
四, 接入 SDK
因为 SDK 不能用 composer 安装, 所以需要自定义 laravel 的第三方库.
具体的步骤:
1: 首先将下载下来的包解压后, 放到 laravel 可以自动加载的地方, 我放在 app/packages/alipay(packages 是自己新建的文件夹, 下载下来的包我重命名了 alipay), 结构如图:
2: 在 composer.json 中的 autoload 下的 classmap 下加入 "app/Packages/alipay";
3: 运行 composer dumpautoload 命令
这样接入 SDK 算是完成了.
5. 具体使用案例
首先在 config/alipay.php 文件中, 配置好相关参数, 具体如图:
然后我直接在 AopSdk.php 的同名目录新建了一个 Alipay.php
文件中简单写了一个生产 APP 支付订单信息的方法
- <?php
- /**
- * Created by PhpStorm.
- * User: 寞小陌
- * Date: 2018/4/18
- * Time: 9:49
- */
- namespace app\Packages\alipay;
- use Mockery\CountValidator\Exception;
- require ('AopSdk.php');
- class Alipay
- {
- /**
- * 生成 APP 支付订单信息
- * @param string $orderId 商品订单号
- * @param string $subject 支付商品的标题
- * @param string $body 支付商品描述
- * @param float $total_amount 商品总支付金额
- * @param int $expire 支付过期时间, 分
- * @return bool|string 返回支付宝签名后订单信息, 否则返回 false
- */
- public function generateOrder($orderId, $subject, $body, $total_amount, $expire){
- try{
- $aop = new \AopClient();
- $aop->gatewayUrl = config('alipay.gatewayUrl');
- $aop->appId = config('alipay.app_id');
- $aop->rsaPrivateKey = config('alipay.private_key');
- $aop->alipayrsaPublicKey = config('alipay.public_key');
- $aop->format= 'json';// 固定
- $aop->charset = config('alipay.charset');
- $aop->signType = config('alipay.sign_type');
- $request = new \AlipayTradeAppPayRequest();
- //SDK 已经封装掉了公共参数, 这里只需要传入业务参数
- $bizcontent = "{\"body\":\"{$body}\"," // 支付商品描述
- . "\"subject\":\"{$subject}\"," // 支付商品的标题
- . "\"out_trade_no\":\"{$orderId}\"," // 商户网站唯一订单号
- . "\"timeout_express\":\"{$expire}m\"," // 该笔订单允许的最晚付款时间, 逾期将关闭交易. 取值范围: 1m~15d.m - 分钟, h - 小时, d - 天, 1c - 当天(1c - 当天的情况下, 无论交易何时创建, 都在 0 点关闭). 该参数数值不接受小数点, 如 1.5h, 可转换为 90m.
- // 注: 若为空, 则默认为 15d.
- . "\"total_amount\":\"{$total_amount}\"," // 订单总金额, 单位为元, 精确到小数点后两位, 取值范围[0.01,100000000]
- . "\"product_code\":\"QUICK_MSECURITY_PAY\""."}";
- $request->setNotifyUrl(config('alipay.notify_url'));
- $request->setBizContent($bizcontent);
- // 这里和普通的接口调用不同, 使用的是 sdkExecute
- $response = $aop->sdkExecute($request);
- //htmlspecialchars 是为了输出到页面时防止被浏览器将关键参数 html 转义, 实际打印到日志以及 http 传输不会有这个问题
- return htmlspecialchars($response);// 就是 orderString 可以直接给客户端请求, 无需再做处理.
- }catch(Exception $e){
- // 失败返回 false
- return false;
- }
- }
- }
注意: 一定要引入 SDK 的入口文件 AopSdk.php,require ('AopSdk.php');
否则会报 AopClient Not Found 这类的错误信息;
注意:$aop = new \AopClient(); 这里有个 "\".
至此, 支付宝的 SDK 就可以用了, 还有许多其他的业务比如退款, 对账等功能, 参考其官方文档就好, 迈出了第一步, 接下来的路就好走多了.
来源: https://www.cnblogs.com/x-x-j/p/8875636.html