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 协议》,转载必须注明作者和本文链接
推荐文章: