php 代付功能_PHP之RSA2加密解密(接入微众银行代付功能过程中使用)
近日,随着我们拼客顺风车平台用户量的逐步增大,提现的数量越来越大,人工提现到银行卡的工作量越来越大,所以准备接入微众银行的代付功能,其中涉及到php的RSA2加密加密,这里记录一下下.话不多说直接上代码:
Traits
/**
* 公加密
* @param $originalData
* @param $key
* @return string
*/
public static function encrypt($originalData){
$crypto = '';
$rsaPublicKey = env('NOWPAY_PUBLIC_KEY');
$res = "-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----";
foreach (str_split($originalData, 117) as $chunk) {
openssl_public_encrypt($chunk, $encryptData, $res);
$crypto .= $encryptData;
}
return base64_encode($crypto);
}
public static function getSignTrueRSA2($Arr)
{
if (!empty($Arr))
{
ksort($Arr);
$str = '';
foreach ($Arr as $k => $v)
{
if ($v == '' || $k == 'signature' || $k == 'mhtSignature')
{
continue;
}
$str .= $k . '=' . $v . '&';
}
$str = substr($str, 0, -1);
return self::createSign($str);
}
return false;
}
/**
* 私签名
* @param string $data 数据
* @return null|string
*/
public static function createSign($data = '')
{
$priKey = env('NOWPAY_PRI_KEY');
$res = "-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----";
return openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256) ? base64_encode($sign) : null;
}
/**
* 公钥验签
* @param string $data
*/
public static function checkSign($Arr , $signKey)
{
if (!empty($Arr)) {
ksort($Arr);
$str = '';
foreach ($Arr as $k => $v) {
if ($v == '' || $k == 'signature' || $k == 'mhtSignature') {
continue;
}
$str .= $k . '=' . $v . '&';
}
$str = substr($str, 0, -1);
$puKey = "-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----";
if ($puKey) {
$result = (bool)openssl_verify($str, base64_decode($signKey), $puKey, OPENSSL_ALGO_SHA256);
return $result;
}
}
return false;
}
/**
* 微众代付--单笔实时代付
* @param type $userId
* @param type $name
* @param type $card_num
* @return type
*/
public static function sendAp04($account_id,$money,$payeeName,$payeeCardNo)
{
$url = 'https://saapi.ipaynow.cn/agentpay/commonApi';
$req['funcode'] = 'AP04';
$req['version'] = '1.0.0';
$req['appId'] = '153715440751020';
$req['mhtOrderNo'] = $account_id;
$req['mhtReqTime'] = Carbon::now()->format('YmdHis');
$req['payeeAccType'] = '02';//入账账户类型
$req['mhtOrderAmt'] = $money;
$req['agentPayMemo'] = '顺风车APP提现';
$str = "payeeCardNo=$payeeCardNo&payeeName=$payeeName";
$req['secretInfo'] = self::encrypt($str);
$req['signType'] = 'RSA2';
$req['notifyUrl'] = 'https://t.pksfc.com/api/notify_ap15';
$req['signature'] = self::getSignTrueRSA2($req);
Log::info("代付".json_encode($req));
$ch = curl_init();
/* 设置验证方式 */
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'charset=utf-8'));
/* 设置返回结果为流 */
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
/* 设置超时时间 */
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
/* 设置通信方式 */
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($req));
$content = curl_exec($ch);
Log::info( "代付结果".$content );
return $content;
}
调用文件
/**
* 充值钱包通知
* @param Request $request
*/
public function notifyAP15()
{
$request = file_get_contents('php://input');
Log::info("代付回调参数".$request);
$Arr = json_decode($request , true);
$Arr['payeeName'] = self::unicodeDecode($Arr['payeeName']);
$sign = Inowpay::checkSign($Arr , $Arr['signature']);
if ($sign == TRUE) {
$account = Account::where('id' , $Arr['mhtOrderNo'])->first();
$account->back_content = json_encode($Arr);
if($Arr['tradeStatus'] == 00){
$account->if_arrive = 1;
$account->state = 2;
$account->save();
}else {
$account->state = 5;//(微众)代付失败
$account->save();
}
echo "success=Y";
exit;
}
echo "fail";
exit;
}
function unicodeDecode($name){
$json = '{"str":"'.$name.'"}';
$arr = json_decode($json,true);
if(empty($arr)) return '';
return $arr['str'];
}
php 代付功能_PHP之RSA2加密解密(接入微众银行代付功能过程中使用)相关推荐
- 在线RSA加密解密,RSA2加密解密(SHA256WithRSA)
为什么80%的码农都做不了架构师?>>> bejson增加 在线RSA加密解密,RSA2加密解密(SHA256WithRSA) 地址:http://www.bejson.com ...
- 加密字符 【问题描述】 在情报传递过程中,为了防止情报被截获,往往需要用一定的方式对情报进行加密。简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易识别
加密字符 [问题描述] 在情报传递过程中,为了防止情报被截获,往往需要用一定的方式对情报进行加密.简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易识别.我们给出一种加密算法,对给定的 ...
- 《加密与解密》ASProtect 2.1x SKE 脱壳过程中遇到的问题与解决方法及脱壳小结
在学习<加密与解密>脱壳部分时,做了一次关于ASProtect的脱壳实验,但按照书上的步骤会报保护错误(Protect error).为了明白原因,我 继续往下深入.除了分析结果,以下还记 ...
- 模拟银行账户功能java_用JAVA语言编写程序,模拟银行账户功能。要有..._银行招聘考试_帮考网...
wwnkar 2019-08-12 06:19 3712 public class 类名{ private String userID: //默认余额10元 private double balanc ...
- php 字符串m5加密解密_PHP加密解密字符串汇总
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...
- python 加密解密_python实现AES加密解密
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...
- 【好用的办公软件】万彩办公大师教程丨PDF安全加密解密
关于万彩办公大师的PDF安全加密解密工具 能给PDF文件添加密码,修改PDF文件打开密码以及复制打印PDF等权限设置(解密前提是知道当前PDF文件的密码,并非暴力破解).软件允许添加和解开不同类型密码 ...
- xiaogui9527 使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据
一. 使用证书结合对称加密算法加.解密长数据 上一章节讨论了如何使用RSA证书加密数据,文中提到:"Dotnet的RSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字 ...
- 安全篇 ━━ JWT的用途和安全探讨,编码解码=\=加密解密
一.定义 JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred betw ...
最新文章
- android检测蓝牙设备连接不上,Android检查设备连接状态
- 配置交换机etherchannel
- 用TensorFlow训练第一个模型
- 作业32-完成评论功能
- 安卓APP_ 控件(2)—— Button
- [Linux程序设计][调试][ElectricFence]
- 项目中有出现过缓存击穿,简单说说怎么回事?
- mysql为何500w拆表_【mysql】MySQL 单表500W+数据,查询超时,如何优化呢?
- 使用ubuntu自带的文件管理器通过ssh管理远程文件
- 最新楚琳web打印控件下载 - 2019适配所有浏览器
- Wampserver下载安装教程
- 张一鸣宣布卸任字节跳动CEO!
- 7-3 敲笨钟 (20 分)Java
- 怎么使用SolidPlant3D创建管道?
- 1167. Anagrammatic Distanc (字符串匹配)
- iGame最强Z370VulcanX主板:为第八代酷睿蓄势待发
- uniapp结合萤石视频ezuikit.js的爬坑记录
- Win7/R2 原生VHD 启动 详解
- 网易楚留香获取服务器信息,楚留香手游生活采集物有哪些 获取攻略
- Facebook名人软件Mentions有了Android版本
热门文章
- 面试官偷偷给我的软件测试工程师面试题,看完你还怕拿不到offer?
- python编程做联机游戏大全单机_手把手教你将单机游戏改造成对战网游(附详细教程)...
- CentOS 定时运行脚本配置
- 软考-架构师-第七章-系统规划 第二节 可行性研究与效益分析 (读书笔记)
- Oracle项目管理主数据之WBS
- 小花梨的字符串 ——java 美登杯
- my.宝石 --- --- ZC 收集
- 电脑插入USB鼠标unknown device问题解决方案
- php curl couldnt connect to host,linux curl命令:curl: (7) couldn't connect to host ?
- 数据丢包怎么修复_一种网络传输中实时音频数据丢包恢复的方法与流程