| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?php
- namespace common\pay\otczhifu;
- class PayUtils
- {
- /**
- * @param array $data
- * @return string
- */
- public static function makeSign($data, $key,$payurl)
- {
- $kye = $key;
- ksort($data);
- $paramsStrExceptSign = '';
- foreach ($data as $k => $val) {
- $paramsStrExceptSign .= $val;
- }
- $paramsStrExceptSign .= $key;
- $sign = md5($paramsStrExceptSign);//签名
- //初始化
- $curl = curl_init();
- //设置抓取的url
- curl_setopt($curl, CURLOPT_URL, $payurl);
- //设置头文件的信息作为数据流输出
- curl_setopt($curl, CURLOPT_HEADER, false);
- //设置获取的信息以文件流的形式返回,而不是直接输出。
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl, CURLOPT_HTTPHEADER, [
- 'Sign:' . $sign
- ]);
- //设置post方式提交
- curl_setopt($curl, CURLOPT_POST, 1);
- //设置post数据
- $post_data = $data;
- curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
- //执行命令
- $return_data = curl_exec($curl);
- //关闭URL请求
- curl_close($curl);
- $return_data = json_decode($return_data, true);
- $tt = print_r($return_data,true);
- file_put_contents('heheheh.txt',$tt);
- if ($return_data['code'] == 200) { //成功
- return $return_data; //返回登录地址
- } else {
- return $return_data;
- }
- }
- //加密函数
- public static function encrypt($data, $rsa_publickey)
- {
- $split = str_split($data, 117); // 1024 bit && OPENSSL_PKCS1_PADDING 不大于117即可
- $crypto = '';
- foreach ($split as $chunk) {
- $isOkay = openssl_public_encrypt($chunk, $encryptData, $rsa_publickey);
- if (!$isOkay) {
- return false;
- }
- $crypto .= $encryptData;
- }
- return base64_encode($crypto);
- }
- //解密函数
- public static function decrypt($data, $rsa_privatekey)
- {
- $split = str_split(base64_decode($data), 128); // 1024 bit 固定172
- $crypto = '';
- foreach ($split as $chunk) {
- $isOkay = openssl_private_decrypt($chunk, $decryptData, $rsa_privatekey); // base64在这里使用,因为172字节是一组,是encode来的
- if (!$isOkay) {
- return false;
- }
- $crypto .= $decryptData;
- }
- return $crypto;
- }
- //响应和验签函数
- public static function response($data,$rsa_private,$key)
- {
- //接受到响应 第一步解密
- $rsa_private = openssl_get_privatekey($rsa_private); //解密出私钥
- $data = json_decode(PayUtils::decrypt($data, $rsa_private), true); //解密函数,得到数据
- ksort($data);
- $sign = $data['sign'];
- unset($data['sign']);
- $paramsStrExceptSign = '';
- foreach ($data as $k => $val) {
- $paramsStrExceptSign .= $k . $val;
- }
- $paramsStrExceptSign .= $key; //需要拼接上密钥
- if ($sign == md5($paramsStrExceptSign)) { //验签成功
-
- return $data['paymentNo']; //返回解析数据中的订单号码
- }else{
- return false; //验签不过就返回false
- }
- }
- }
|