支付宝生活号(原服务窗)应用网关配置

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怎么配置支付宝生活号应用网关呢?相关推荐

  1. [升级版]支付宝扫码付款直接到银行卡最新教程, 自动填写卡号

    目前业界普遍使用的微信.支付宝.第三方.第四方收款渠道,正遭大规模的封号.冻结.卡钱等等等等...您是否也是为此头疼已久?是否还有真正稳定的收款渠道?别急!试试支付宝快捷充值技术!支付宝扫一扫直接到账 ...

  2. laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)

    laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) 参考文章: (1)laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) (2)http ...

  3. 上篇: php 微信公众号 基于Thinkphp3.2框架开发

    说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...

  4. Java开发微信公众号之整合weixin-java-tools框架开发微信公众号

    微信开发者接入文档 : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 微信公众平台测试账号申请: http ...

  5. laravel+easywechat对接微信公众号自动回复图文消息

    laravel+easywechat对接微信公众号自动回复图文消息 图文回复消息创建 对接数据库根据关键词返回图文信息 前面我们对接配置了微信公众号,laravel5.4 对接微信公众号使用larav ...

  6. 华为云快成长直播间 服务号 专场, 为企业打造全场景智慧生活

    随着数字化的发展,我们在生活中会接触到不同商家.品牌的服务号,但在这些传统的服务号上,经常会遇到信息过载.内容驳杂.终端繁多等问题,让商家与品牌与消费者之间的需求与供给关系产生逆差,影响用户体验. 9 ...

  7. 小猪o2o生活通v14.17双系统版源码支付宝H5微信支付配置流程及修改方法

    1>获取移动应用的APPID填写到O2O系统后台 2> 移动应用签约功能 3> 点击支付宝开放平台移动应用信息 4> 查看支付宝公钥 5> 利用秘钥生成工具,生成一对私钥 ...

  8. php支付宝手机网站支付功能,手机网站支付如何接入支付宝简易版支付功能PHP版...

    接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台  2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到appid才能调用相应的 ...

  9. Tomcat是什么:Tomcat与Java技、Tomcat与Web应用以及Tomcat基本框架及相关配置

    1.Tomcat是什么        Apache Tomcat是由Apache Software Foundation(ASF)开发的一个开源Java WEB应用服务器. 类似功能的还有:Jetty ...

最新文章

  1. node项目部署到服务器报错,记一次部署node项目到centos服务器经历
  2. L1-006 连续因子
  3. 控制输入框只能输入数字
  4. html div比例,我的前端组件 ---- 16:9固定宽高比例的div
  5. [原]零基础学习在Android进行SDL开发系列文章
  6. VUE工程跨域的配置
  7. JavaScript高级程序设计阅读笔记
  8. 为EasyUI 的Tab 标签添加右键菜单
  9. [有限元] 四结点三角形单元和五结点三角形单元的形函数
  10. Hexo+NexT搭建博客笔记
  11. 百度实习生前端面试面经
  12. python具备的功能是_用了Python这么多年,揭秘Python不为人知的7大功能和特点!...
  13. Mesa核心数据结构
  14. 『互联网架构』软件架构-软件系统设计(一)
  15. python逐行读取xls文件
  16. …… ᵇᵘᵗ ᵗʰᵃᵗ ʸᵒᵘ ˡᵒᵛᵉ ⁿᵒ ᵒⁿᵉ 【transshipment】
  17. 磁珠和去耦电感的区别
  18. 在虚拟机里配置mysql环境
  19. SpringCloud Hystrix熔断器
  20. 【Nodejs】Nodejs入门必知

热门文章

  1. R语言聚类分析之层次聚类(hierarchical clustering)实战
  2. python使用imbalanced-learn的TomekLinks方法进行下采样处理数据不平衡问题
  3. 影像组学视频学习笔记(23)-主成分析PCA、降维和特征筛选的区别、Li‘s have a solution and plan.
  4. 影像组学视频学习笔记(21)-影像组学常用软件推荐、Li‘s have a solution and plan.
  5. python 装饰器示例
  6. 操作系统 作业调度实验报告
  7. 车牌检测识别--Towards End-to-End Car License Plates Detection and Recognition with Deep Neural Networks
  8. 三层神经网络前向后向传播示意图
  9. pip(pip3)安装依赖库失败
  10. 数值分析上机题matlab线性方程组,数值分析上机实验报告 - 线性方程组部分实验题1...