php支付宝签名验证类
<?php /*
* 黎明互联
* https://www.liminghulian.com/
*/ class RSA
{
/**
* RSA签名
* @param $data 待签名数据
* @param $private_key 私钥字符串
* return 签名结果
*/
function rsaSign($data, $private_key,$type = 'RSA') { $search = [
"-----BEGIN RSA PRIVATE KEY-----",
"-----END RSA PRIVATE KEY-----",
"\n",
"\r",
"\r\n"
]; $private_key=str_replace($search,"",$private_key);
$private_key=$search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL . $search[1];
$res=openssl_get_privatekey($private_key); if($res)
{
if($type == 'RSA'){
openssl_sign($data, $sign,$res);
}elseif($type == 'RSA2'){
//OPENSSL_ALGO_SHA256
openssl_sign($data, $sign,$res,OPENSSL_ALGO_SHA256);
}
openssl_free_key($res);
}else {
exit("私钥格式有误");
}
$sign = base64_encode($sign);
return $sign;
} /**
* RSA验签
* @param $data 待签名数据
* @param $public_key 公钥字符串
* @param $sign 要校对的的签名结果
* return 验证结果
*/
function rsaCheck($data, $public_key, $sign,$type = 'RSA') {
$search = [
"-----BEGIN PUBLIC KEY-----",
"-----END PUBLIC KEY-----",
"\n",
"\r",
"\r\n"
];
$public_key=str_replace($search,"",$public_key);
$public_key=$search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1];
$res=openssl_get_publickey($public_key);
if($res)
{
if($type == 'RSA'){
$result = (bool)openssl_verify($data, base64_decode($sign), $res);
}elseif($type == 'RSA2'){
$result = (bool)openssl_verify($data, base64_decode($sign), $res,OPENSSL_ALGO_SHA256);
}
openssl_free_key($res);
}else{
exit("公钥格式有误!");
}
return $result;
} }
<?php
require "RSA.php";
/****
* Class Base
* 支付宝基类
*/
class Base extends RSA{
/**
* 以下信息需要根据自己实际情况修改
*/
const PID = '支付宝后台获取';//合作伙伴ID
const REURL = '';//同步通知地址
const NOURL = '';//异步通知地址
const KEY = '支付宝后台获取';
const PAYGAGEWAY = 'https://mapi.alipay.com/gateway.do';
const APPPRIKEY ="";
const ALIPUBKEY = '';
const APPID = '';
const NEW_ALIPUBKE = '';
const NEW_PAYGATEWAY = 'https://openapi.alipay.com/gateway.do'; //生成json數據的方法
public function getStr($arr,$type = 'RSA'){
//筛选
if(isset($arr['sign'])){
unset($arr['sign']);
}
if(isset($arr['sign_type']) && $type == 'RSA'){
unset($arr['sign_type']);
}
//排序
ksort($arr);
//拼接
return $this->getUrl($arr,false);
} //将数组转换为url格式的字符串
public function getUrl($arr,$encode = true){
if($encode){
return http_build_query($arr);
}else{
return urldecode(http_build_query($arr));
}
}
//获取签名MD5
public function getSign($arr){
return md5($this->getStr($arr) . self::KEY );
}
//获取含有签名的数组MD5
public function setSign($arr){
$arr['sign'] = $this->getSign($arr);
return $arr;
}
//获取签名RSA
public function getRsaSign($arr){
return $this->rsaSign($this->getStr($arr), self::APPPRIKEY) ;
}
//获取含有签名的数组RSA
public function setRsaSign($arr){
$arr['sign'] = $this->getRsaSign($arr);
return $arr;
}
//获取签名RSA2
public function getRsa2Sign($arr){
return $this->rsaSign($this->getStr($arr,'RSA2'), self::APPPRIKEY,'RSA2') ;
}
//获取含有签名的数组RSA
public function setRsa2Sign($arr){
$arr['sign'] = $this->getRsa2Sign($arr);
return $arr;
}
//记录日志
public function logs($filename,$data){
file_put_contents('./public/logs/' . $filename, $data . "\r\n",FILE_APPEND);
}
//2.验证签名
public function checkSign($arr){
$sign = $this->getSign($arr);
if($sign == $arr['sign']){
return true;
}else{
return false;
}
} //验证是否来之支付宝的通知
public function isAlipay($arr){
$str = file_get_contents(self::CHECKURL . $arr['notify_id']);
if($str == 'true'){
return true;
}else{
return false;
}
}
// 4.验证交易状态
public function checkOrderStatus($arr){
if($arr['trade_status'] == 'TRADE_SUCCESS' || $arr['trade_status'] == 'TRADE_FINISHED'){
return true;
} else {
return false;
}
} }
、、、、5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
php支付宝签名验证类的更多相关文章
- 支付宝签名验证实现-Delphi版
支付宝签名验证实现-Delphi版 首先介结下支付宝签名验证流程: 一 支付宝密钥生成 支付宝提供秘钥生成工具https://docs.open.alipay.com/291/105971/ 用此下 ...
- 使用PHP实现手机端APP支付宝的支付功能
最近应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1 ...
- PHP APP端支付宝支付
应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在 ...
- 【转载】关于Alipay支付宝接口(Java版)
转载自:http://blog.163.com/lai_chao/blog/static/70340789201412724619514/ 1.alipay 双功能支付简介 2.alipay 提交支付 ...
- iOS:集成支付宝支付
一.介绍 支付宝的集成还是比较简单的,按照文档来一步步操作,基本上很顺利.不过,仍然有两个地方会是坑.这里我集成成功了,在此整理一下.说先说一下我遇到的坑如下: 第一个坑:下载的SDK文件AliPay ...
- 李洪强iOS开发支付集成之支付宝支付
iOS开发支付集成之支付宝支付 下载支付宝SDK 首先是开发包下载,还是比较难发现的,网上以前文章中的链接都打不开,我找了好久才找到的.最新的地址在这里(注意的是下载出来的SDK包里面并没有传说中的开 ...
- iOS开发之支付宝集成
项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里. ...
- 关于Alipay支付宝接口(Java版)
支付宝开发文档:https://b.alipay.com/order/techService.htm 1.alipay 双功能支付简介 2.alipay 提交支付订单 3.alipay 整合双功能支付 ...
- Android支付——支付宝支付总结
摘要:分享牛系列.分享牛转载.第三方支付,java第三方支付.android第三方支付. 原文地址:http://blog.csdn.net/zwl5670/article/details/51219 ...
随机推荐
- Unix中使用MeteoInfo - Xmanager设置
通过Xshell等客户端登陆Unix系统运行图形软件(X11)需要有X-server,Xmanager是其中的佼佼者(可惜是商业软件).我通常用Xshell登陆气象局的IBM高性能计算机(AIX系统) ...
- 多Y轴图的尝试
最近的一篇文章中需要绘制多Y轴图形,Excel只能做双Y轴图,又尝试了Origin,SigmaPlot,Igor等软件,手动做起来相当繁琐,批量做更是觉得费劲,干脆尝试在MeteoInfoLab里实现 ...
- .NetCore 异步编程 - async/await
前言: 这段时间开始用.netcore做公司项目,发现前辈搭的框架通篇运用了异步编程方式,也就是async/await方式,作为一个刚接触的小白,自然不太明白其中原理,最重要的是,这个玩意如果不明白基 ...
- chrome(谷歌)登录失败解决方案
相信有很多小伙伴和我一样,同步chrome的收藏夹,这样也便于随时可以查看自己收藏的网址.但是同步文件,必须先要登录chrome账号,登录chrome账号时,总是会报黄页,或者一直加载不出来.接下来, ...
- PO模式学习笔记
框架: 1.PO模式应用(测试对象和测试用例分离)(写到简历中) 2.引入ddt 3.深入分层:测试数据分离 4.遵循原则:测试用例的独立性 5.深入分层:元素定位分离 6.框架优化:提取basepa ...
- 很多人都搞不清楚C语言和C++的关系!今天我们来一探究竟为大家解惑~
最近,身边有许多小伙伴已经开始学习编程了,但是呢,学习又会碰到许多的问题,其中作为新手小白提到最多的问题就是编程语言的选择. 每次遇到这种问题,看起来很简单,但是又有很多小伙伴搞不清编程语言之间的关系 ...
- XUEXI0.4
1.堆是一种内存管理方式,堆和栈是没有关联的.由于内存的容量很大,并且内存需求在时间和空间上没有规律,所以对操作系统来说,管理内存是非常复杂的. 2.堆这种内存管理方式特点是自由.堆内存是由操作系统划 ...
- centos8平台php7.4.2安装phpredis实现对redis的访问
一,下载phpredis 1,官方下载地址: https://github.com/phpredis/phpredis/releases 2,wget下载 [root@yjweb source]# w ...
- C++学习---二叉树的输入及非递归遍历
二叉树的二叉链表存储表示如下 //二叉树的二叉链表存储表示 typedef struct BiTNode { char data;//结点数据域 struct BiTNode* lchild, * r ...
- 【bug录】安装项目编译环境bug录
安装mySQL是遇到一些问题: 刚开始按照教程配置int文件,看着图标没有显示正确,把隐藏文件夹后缀名去掉, mysql由两种版本,zip和msi格式,我用的是zip格式,mysql后进行解压,记住解 ...