支付宝生活号 php,关于PHP框架Laravel怎么配置支付宝生活号应用网关呢?
支付宝生活号(原服务窗)应用网关配置
RSA秘钥生成下载支付宝官方demo导入Laravel框架内1.新建资源目录,已建可忽略2.删除不必要的文件3.配置confi.php 文件4.新建获取config配置文件类 GetConfig.php5.修改HttpRequst.php文件6.配置Laravel 访问路径7.修改Gateway.php文件最后测试,验证
RSA秘钥生成
这里可以采用蚂蚁金服(支付宝)秘钥生成工具,直接生成秘钥对。
地址:https://docs.open.alipay.com/291/105971/
上图秘钥需要到生活号后台配置下,并获取支付宝公钥备用
下载支付宝官方demo
目前官网有提供完整的demo,下载地址:https://docs.open.alipay.com/54/104507/
导入Laravel框架内
1.新建资源目录,已建可忽略
app目录下新建“Libaries”目录用来存放相关文件,并将demo包解压到这个目录
源文件夹“ServiceWindow_Demo_php” 修改为 “alipay”
namespace App\Libraries\Alipay;
2.删除不必要的文件
本次操作只是验证应用网关的,咱们先删掉其他文件。
源文件截图
这边只保留
aop
img
log
config.php
function.inc.php
Gateway.php
HttpRequst.php
这些就够了
3.配置confi.php 文件
将之前秘钥都填入文件内,签名方式咱们这边选择“RSA2”
这边强调一点,不管你之前用工具生成的秘钥对是什么样子的,在填入后,将他们转为一行的字符串,不然会报错。
注:如果“openssl_sign(): supplied key param cannot be coerced into a private key”,用下面办法
删除下面两个
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
然后再转为一行字符串填入config文件内
4.新建获取config配置文件类 GetConfig.php
这里这样写是便于后需要我们和控制器来调用这个配置文件
namespace App\Libraries\Alipay;
class GetConfig
{
public static function appId()
{
include('config.php');
return $config["app_id"];
}
····
}
5.修改HttpRequst.php文件
由于官方demo也有用php到框架,这里将其改为laravel兼容的,并删除原框架内容。
如果有相关文件需要调用HttpRequest类,需要补充传入$res请求参数,这边可以理解为laravel $request.
namespace App\Libraries\Alipay;
class HttpRequest
{
/** sendPostRequst 方法不修改 **/
public static function getRequest($key, $res)
{
$request = null;
$get = $res->all(); //传入所有请求的参数
if (isset ($get [$key]) && !empty ($get [$key])) {
if (get_magic_quotes_gpc()) {
$request = stripslashes($get [$key]);
} else {
$request = $get [$key];
}
}
return $request;
}
}
6.配置Laravel 访问路径
设置路由
Route::any('ali/gateway', 'AliController@Gateway');//支付宝网关
设置无须“VerifyCsrfToken”验证,这个一定要设置,不然会报错
protected $except = [
'ali/*',
];
接下来我们创建对应的控制器 AliController.php
namespace App\Http\Controllers;
use App\Libraries\Alipay\Aop\AopClient;
use App\Libraries\Alipay\HttpRequest;
use App\Libraries\Alipay\GetConfig;
use App\Libraries\Alipay\Gateway;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
class AliPayController extends Controller
{
public function Gateway(Request $request)
{
$sign = HttpRequest::getRequest("sign", $request);
$sign_type = HttpRequest::getRequest("sign_type", $request);
$biz_content = HttpRequest::getRequest("biz_content", $request);
$service = HttpRequest::getRequest("service", $request);
$charset = HttpRequest::getRequest("charset", $request);
if (empty ($sign) || empty ($sign_type) || empty ($biz_content) || empty ($service) || empty ($charset)) {
Log::info("some parameter is empty!");
return json_encode(["msg"=>"some parameter is empty.","time"=>time()]);
}
// 收到请求,先验证签名
$as = new AopClient();
$as->alipayrsaPublicKey = GetConfig::alipayPublicKey();
$sign_verify = $as->rsaCheckV2($_REQUEST, GetConfig::alipayPublicKey(), GetConfig::signType());
if (!$sign_verify) {
// 如果验证网关时,请求参数签名失败,则按照标准格式返回,方便在服务窗后台查看。
if (HttpRequest::getRequest("service", $request) == "alipay.service.check") {
$gw = new Gateway ();
$gw->verifygw(false, $request);
return json_encode(["msg"=>"sign verfiy success.","time"=>time()]);
} else {
return json_encode(["msg"=>"sign verfiy fail.","time"=>time()]);
}
}
// 验证网关请求
if (HttpRequest::getRequest("service", $request) == "alipay.service.check") {
$gw = new Gateway ();
$gw->verifygw(true, $request);
}
}
}
7.修改Gateway.php文件
这里删除大部分没用的代码,保留了相关的业务逻辑代码
namespace App\Libraries\Alipay;
use App\Libraries\Alipay\Aop\AopClient;
header("Content-type: text/html; charset=gbk");
class Gateway
{
public function verifygw($is_sign_success,$res)
{
include('config.php');
include('function.inc.php');
$biz_content = HttpRequest::getRequest("biz_content",$res);
$disableLibxmlEntityLoader = libxml_disable_entity_loader(true);
$xml = simplexml_load_string($biz_content);
libxml_disable_entity_loader($disableLibxmlEntityLoader);
$EventType = ( string )$xml->EventType;
if ($EventType == "verifygw") {
$as = new AopClient();
$as->rsaPrivateKey = $config['merchant_private_key'];
if ($is_sign_success) {
$response_xml = "true" . $config ['merchant_public_key'] . "";
} else {
$response_xml = "falseVERIFY_FAILED" . $config ['merchant_public_key'] . "";
}
$mysign = $as->alonersaSign($response_xml, $config['merchant_private_key'], $config['sign_type']);
$return_xml = "" . $response_xml . "" . $mysign . "" . $config['sign_type'] . "";
writeLog("response_xml: " . $return_xml);
echo $return_xml;
exit ();
}
}
}
最后测试,验证
a.提醒如果在demo包内调用文件使用include()即可。
b.部分引用的文件需要加入namespace不要引用会报错!
声明:原创文章,谢绝转载!!
支付宝生活号 php,关于PHP框架Laravel怎么配置支付宝生活号应用网关呢?相关推荐
- [升级版]支付宝扫码付款直接到银行卡最新教程, 自动填写卡号
目前业界普遍使用的微信.支付宝.第三方.第四方收款渠道,正遭大规模的封号.冻结.卡钱等等等等...您是否也是为此头疼已久?是否还有真正稳定的收款渠道?别急!试试支付宝快捷充值技术!支付宝扫一扫直接到账 ...
- laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)
laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) 参考文章: (1)laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) (2)http ...
- 上篇: php 微信公众号 基于Thinkphp3.2框架开发
说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...
- Java开发微信公众号之整合weixin-java-tools框架开发微信公众号
微信开发者接入文档 : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 微信公众平台测试账号申请: http ...
- laravel+easywechat对接微信公众号自动回复图文消息
laravel+easywechat对接微信公众号自动回复图文消息 图文回复消息创建 对接数据库根据关键词返回图文信息 前面我们对接配置了微信公众号,laravel5.4 对接微信公众号使用larav ...
- 华为云快成长直播间 服务号 专场, 为企业打造全场景智慧生活
随着数字化的发展,我们在生活中会接触到不同商家.品牌的服务号,但在这些传统的服务号上,经常会遇到信息过载.内容驳杂.终端繁多等问题,让商家与品牌与消费者之间的需求与供给关系产生逆差,影响用户体验. 9 ...
- 小猪o2o生活通v14.17双系统版源码支付宝H5微信支付配置流程及修改方法
1>获取移动应用的APPID填写到O2O系统后台 2> 移动应用签约功能 3> 点击支付宝开放平台移动应用信息 4> 查看支付宝公钥 5> 利用秘钥生成工具,生成一对私钥 ...
- php支付宝手机网站支付功能,手机网站支付如何接入支付宝简易版支付功能PHP版...
接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台 2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到appid才能调用相应的 ...
- Tomcat是什么:Tomcat与Java技、Tomcat与Web应用以及Tomcat基本框架及相关配置
1.Tomcat是什么 Apache Tomcat是由Apache Software Foundation(ASF)开发的一个开源Java WEB应用服务器. 类似功能的还有:Jetty ...
最新文章
- node项目部署到服务器报错,记一次部署node项目到centos服务器经历
- L1-006 连续因子
- 控制输入框只能输入数字
- html div比例,我的前端组件 ---- 16:9固定宽高比例的div
- [原]零基础学习在Android进行SDL开发系列文章
- VUE工程跨域的配置
- JavaScript高级程序设计阅读笔记
- 为EasyUI 的Tab 标签添加右键菜单
- [有限元] 四结点三角形单元和五结点三角形单元的形函数
- Hexo+NexT搭建博客笔记
- 百度实习生前端面试面经
- python具备的功能是_用了Python这么多年,揭秘Python不为人知的7大功能和特点!...
- Mesa核心数据结构
- 『互联网架构』软件架构-软件系统设计(一)
- python逐行读取xls文件
- …… ᵇᵘᵗ ᵗʰᵃᵗ ʸᵒᵘ ˡᵒᵛᵉ ⁿᵒ ᵒⁿᵉ 【transshipment】
- 磁珠和去耦电感的区别
- 在虚拟机里配置mysql环境
- SpringCloud Hystrix熔断器
- 【Nodejs】Nodejs入门必知
热门文章
- R语言聚类分析之层次聚类(hierarchical clustering)实战
- python使用imbalanced-learn的TomekLinks方法进行下采样处理数据不平衡问题
- 影像组学视频学习笔记(23)-主成分析PCA、降维和特征筛选的区别、Li‘s have a solution and plan.
- 影像组学视频学习笔记(21)-影像组学常用软件推荐、Li‘s have a solution and plan.
- python 装饰器示例
- 操作系统 作业调度实验报告
- 车牌检测识别--Towards End-to-End Car License Plates Detection and Recognition with Deep Neural Networks
- 三层神经网络前向后向传播示意图
- pip(pip3)安装依赖库失败
- 数值分析上机题matlab线性方程组,数值分析上机实验报告 - 线性方程组部分实验题1...