Laravel 整合 EasyAlipay 实现支付宝手机网站 Wap 支付

Laravel 整合 EasyAlipay 实现支付宝手机网站 Wap 支付!

安装 EasyAlipay

这里我们使用的 EasyAlipay 是:
https://github.com/shulidata/easyalipay

在 Laravel 项目根目录下,使用安装命令:

composer require shulidata/easyalipay

EasyAliapy 被安装在 vendor/shulidata/easyalipay 目录下面。目录结构为:

- ./docs
- ./src
- ./test
- composer.json
- LICENSE.md
- NOTICE.md
- README.md

支付宝设置

首先在:
https://www.alipay.com/
注册商家账号。

然后,到:
https://b.alipay.com/signing/productDetail...
进行手机网站支付签约,预计一个工作日内审核通过。

在:
https://openhome.alipay.com/
入驻成为开发平台开发者。

签约审核通过后,在:
https://openhome.alipay.com/platform/devel...
网页&移动应用中,有一个已上线的 “应用2.0签约2020****”

点进此应用,选择“应用信息”,进行“接口加签方式的配置”。
点击“设置”后,在出现的页面中选择“公钥”,并下载“支付宝密钥生成器”。支付宝密钥生成器
使用“支付宝密钥生成器”生成公钥和私钥:

EasyAlipay 用法

先对应几种用法,初始化对象:

use EasyAlipay\Factory;

$options = [
    'app_id'                   => '你的应用APPID',
    'gateway_url'              => "网关地址",//沙箱环境网关gateway_url:https://openapi.alipaydev.com/gateway.do,线上网关gateway_url:https://openapi.alipay.com/gateway.do
    'sign_type'                => "RSA2",
    'charset'                  => "UTF-8",
    'alipay_public_key'        => '支付宝公钥',
    'merchant_private_key'     => '应用私钥',
    // ...
];

//通用基础
$app = Factory::base($options);
//营销
$app = Factory::marketing($options);
//小程序
$app = Factory::mini($options);
//生活号
$app = Factory::openPublic($options);
//支付
$app = Factory::payment($options);

vendor/shulidata/easyalipay/docs/Payment/Pay.md 中的支付使用示例:

use EasyAlipay\Factory;

$options = [
    'app_id'                   => '2016051900098985',
    'alipay_public_key'        => '支付宝公钥',
    'merchant_private_key'     => '应用私钥',
    // ...
];

$app = Factory::payment($options);

$app['pay']->pay($subject,$out_trade_no,$total_amount,$auth_code);

查看源代码 vendor/shulidata/easyalipay/src/Payment/Pay/Client.php :

$request->setApiMethodName("alipay.trade.pay");

发现调用的是 alipay.trade.pay (统一收单交易支付接口)。
可是我们要使用的手机网站支付接口是 alipay.trade.wap.pay (手机网站支付接口2.0)。

修改 EasyAlipay 源码

拷贝 vendor/shulidata/easyalipay/src/Payment 目录到 vendor/shulidata/easyalipay/src/Wap,并将拷贝后的所有源码中的 Payment 命名空间改为 Pay
例如,将 vendor/shulidata/easyalipay/src/Wap/Pay/Client.php 中的:

namespace EasyAlipay\Payment\Pay;
use EasyAlipay\Payment\Model\AlipayTradePayContentBuilder;

修改为:

namespace EasyAlipay\Wap\Pay;
use EasyAlipay\Wap\Model\AlipayTradePayContentBuilder;

查看 支付宝接口文档,请求参数部分有几个必选项:

参数 类型 是否必填 最大长度 描述 示例值
subject String 必选 256 商品的标题/交易标题/订单标题/订单关键字等。 大乐透
out_trade_no String 必选 64 商户网站唯一订单号 70501111111S001111119
total_amount Price 必选 9 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] 9.00
quit_url String 必选 400 用户付款中途退出返回商户网站的地址 http://www.taobao.com/product/113714.html
product_code String 必选 64 销售产品码,商家和支付宝签约的产品码 QUICK_WAP_WAY

继续修改 Wap/Pay/Client.php 为:

$payContentBuilder = new AlipayTradePayContentBuilder();
$payContentBuilder->setSubject($subject);
$payContentBuilder->setOutTradeNo($out_trade_no);
$payContentBuilder->setTotalAmount($total_amount);
$payContentBuilder->setQuitUrl("https://www.example.com/recharge");
$payContentBuilder->setProductCode("QUICK_WAP_WAY");
$request = new AopRequest ();
$request->setBizContent($payContentBuilder->getBizContent());
$request->setApiMethodName("alipay.trade.wap.pay");
$request->setReturnUrl("https://www.example.com/me");
return($this->pageExecute($request, NULL, NULL)) ;

在 src/Wap/Model/AlipayTradePayContentBuilder.php 中添加:

private $quit_url="http://www.example.com";

private $product_code = "QUICK_WAP_WAY";

public function setQuitUrl($quit_url)
{
    $this->quit_url = $quit_url;
    $this->bizContentarr['quit_url'] = $quit_url;
}

public function setProductCode($product_code)
{
    $this->product_code = $product_code;
    $this->bizContentarr['product_code'] = $product_code;
}

使用

接下来使用,在自己的项目内添加业务逻辑:

use EasyAlipay\Factory;

$options = [
    'app_id'                   => '你的app_id',
    'alipay_public_key'        => '支付宝公钥',
    'merchant_private_key'     => '应用私钥',
    // ...
];

$app = Factory::wap($options);

$subject = "test";
$out_trade_no = time().rand(1000,9999);
$total_amount = 1;
$auth_code = "";

$ret = $app['pay']->pay($subject,$out_trade_no,$total_amount,$auth_code);

这样就可以唤起支付宝进行手机网站 Wap 支付啦。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!