近日,随着我们拼客顺风车平台用户量的逐步增大,提现的数量越来越大,人工提现到银行卡的工作量越来越大,所以准备接入微众银行的代付功能,其中涉及到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加密解密(接入微众银行代付功能过程中使用)相关推荐

  1. 在线RSA加密解密,RSA2加密解密(SHA256WithRSA)

    为什么80%的码农都做不了架构师?>>>    bejson增加 在线RSA加密解密,RSA2加密解密(SHA256WithRSA) 地址:http://www.bejson.com ...

  2. 加密字符 【问题描述】 在情报传递过程中,为了防止情报被截获,往往需要用一定的方式对情报进行加密。简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易识别

    加密字符 [问题描述] 在情报传递过程中,为了防止情报被截获,往往需要用一定的方式对情报进行加密.简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易识别.我们给出一种加密算法,对给定的 ...

  3. 《加密与解密》ASProtect 2.1x SKE 脱壳过程中遇到的问题与解决方法及脱壳小结

    在学习<加密与解密>脱壳部分时,做了一次关于ASProtect的脱壳实验,但按照书上的步骤会报保护错误(Protect error).为了明白原因,我 继续往下深入.除了分析结果,以下还记 ...

  4. 模拟银行账户功能java_用JAVA语言编写程序,模拟银行账户功能。要有..._银行招聘考试_帮考网...

    wwnkar 2019-08-12 06:19 3712 public class 类名{ private String userID: //默认余额10元 private double balanc ...

  5. php 字符串m5加密解密_PHP加密解密字符串汇总

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...

  6. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

  7. 【好用的办公软件】万彩办公大师教程丨PDF安全加密解密

    关于万彩办公大师的PDF安全加密解密工具 能给PDF文件添加密码,修改PDF文件打开密码以及复制打印PDF等权限设置(解密前提是知道当前PDF文件的密码,并非暴力破解).软件允许添加和解开不同类型密码 ...

  8. xiaogui9527 使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据

    一.  使用证书结合对称加密算法加.解密长数据 上一章节讨论了如何使用RSA证书加密数据,文中提到:"Dotnet的RSA实现有个特点,它必须要在明文中添加一些随机数,所以明文不能把128字 ...

  9. 安全篇 ━━ JWT的用途和安全探讨,编码解码=\=加密解密

    一.定义 JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred betw ...

最新文章

  1. android检测蓝牙设备连接不上,Android检查设备连接状态
  2. 配置交换机etherchannel
  3. 用TensorFlow训练第一个模型
  4. 作业32-完成评论功能
  5. 安卓APP_ 控件(2)—— Button
  6. [Linux程序设计][调试][ElectricFence]
  7. 项目中有出现过缓存击穿,简单说说怎么回事?
  8. mysql为何500w拆表_【mysql】MySQL 单表500W+数据,查询超时,如何优化呢?
  9. 使用ubuntu自带的文件管理器通过ssh管理远程文件
  10. 最新楚琳web打印控件下载 - 2019适配所有浏览器
  11. Wampserver下载安装教程
  12. 张一鸣宣布卸任字节跳动CEO!
  13. 7-3 敲笨钟 (20 分)Java
  14. 怎么使用SolidPlant3D创建管道?
  15. 1167. Anagrammatic Distanc (字符串匹配)
  16. iGame最强Z370VulcanX主板:为第八代酷睿蓄势待发
  17. uniapp结合萤石视频ezuikit.js的爬坑记录
  18. Win7/R2 原生VHD 启动 详解
  19. 网易楚留香获取服务器信息,楚留香手游生活采集物有哪些 获取攻略
  20. Facebook名人软件Mentions有了Android版本

热门文章

  1. 面试官偷偷给我的软件测试工程师面试题,看完你还怕拿不到offer?
  2. python编程做联机游戏大全单机_手把手教你将单机游戏改造成对战网游(附详细教程)...
  3. CentOS 定时运行脚本配置
  4. 软考-架构师-第七章-系统规划 第二节 可行性研究与效益分析 (读书笔记)
  5. Oracle项目管理主数据之WBS
  6. 小花梨的字符串 ——java 美登杯
  7. my.宝石 --- --- ZC 收集
  8. 电脑插入USB鼠标unknown device问题解决方案
  9. php curl couldnt connect to host,linux curl命令:curl: (7) couldn't connect to host ?
  10. 数据丢包怎么修复_一种网络传输中实时音频数据丢包恢复的方法与流程