|
@@ -0,0 +1,168 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Libs\Pay\Merchants;
|
|
|
+
|
|
|
+use GuzzleHttp\Client;
|
|
|
+use Log;
|
|
|
+
|
|
|
+class OriginBank
|
|
|
+{
|
|
|
+ function __construct($config)
|
|
|
+ {
|
|
|
+ $this->open_id = $config['open_id'];
|
|
|
+ $this->open_key = $config['open_key'];
|
|
|
+ $this->sub_appid = $config['sub_appid'];
|
|
|
+ $this->PayClient = new client(['base_uri'=>'https://api.orangebank.com.cn/','timeout'=>3]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成订单
|
|
|
+ function send($data)
|
|
|
+ {
|
|
|
+ $time = time();
|
|
|
+ $base_data = [
|
|
|
+ 'open_id'=>$this->open_id,
|
|
|
+ 'timestamp'=>$time,
|
|
|
+ ];
|
|
|
+ $data = [
|
|
|
+ 'out_no'=>$data['trade_no'],
|
|
|
+ 'pmt_tag'=>'WeixinOL',
|
|
|
+ 'ord_name'=>'小说充值',
|
|
|
+ 'original_amount'=>$data['price'],
|
|
|
+ 'trade_amount'=>$data['price'],
|
|
|
+ //'notify_url'=>env('ORIGINBANK_NOFITY_URL'),
|
|
|
+ 'sub_appid'=>$this->sub_appid,
|
|
|
+ 'sub_openid'=>$data['openid']
|
|
|
+ ];
|
|
|
+
|
|
|
+// $data =[];
|
|
|
+// $data['out_no'] = "123456";
|
|
|
+// $data['pmt_tag'] = "WeixinBERL";
|
|
|
+// $data['original_amount'] = "1";
|
|
|
+// $data['trade_amount'] = "1";
|
|
|
+// $data['ord_name'] = "购买物品订单名称";
|
|
|
+
|
|
|
+ dump($data);
|
|
|
+ $base_data['data'] = $this->encrypt(json_encode($data),$this->open_key);
|
|
|
+ dump($data);
|
|
|
+
|
|
|
+ dump($this->decrypt($base_data['data'],$this->open_key));
|
|
|
+ $base_data['sign'] = $this->signs($base_data);
|
|
|
+
|
|
|
+ dump('base_data');dump($base_data);
|
|
|
+
|
|
|
+ $response = $this->PayClient->request('POST','/mct1/payorder',['form_params'=>$base_data])->getBody()->getContents();
|
|
|
+ dd($this->decrypt(json_decode($response,1)['data'],$this->open_key));
|
|
|
+ // return $this->getPayInfo($response);
|
|
|
+ }
|
|
|
+
|
|
|
+ function getPayInfo($response)
|
|
|
+ {
|
|
|
+ try{
|
|
|
+ $return_info = json_decode($response,1);
|
|
|
+ //dd($return_info);
|
|
|
+ if($return_info['errcode'] == 0)
|
|
|
+ {
|
|
|
+ $pay_info = [
|
|
|
+ 'appId'=>$return_info['data']['appId'],
|
|
|
+ 'timeStamp'=>$return_info['data']['timeStamp'],
|
|
|
+ 'nonceStr'=>$return_info['data']['nonceStr'],
|
|
|
+ 'signType'=>$return_info['data']['signType'],
|
|
|
+ 'package'=>$return_info['data']['package'],
|
|
|
+ 'paySign'=>$return_info['data']['paySign']
|
|
|
+ ];
|
|
|
+ return $pay_info;
|
|
|
+ }
|
|
|
+ }catch (\Exception $e)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //签名
|
|
|
+ public function signs($array){
|
|
|
+ $signature = array();
|
|
|
+ foreach($array as $key=>$value){
|
|
|
+ $signature[$key]=$key.'='.$value;
|
|
|
+ }
|
|
|
+ $signature['open_key']='open_key'.'='.$this->open_key;
|
|
|
+ ksort($signature);
|
|
|
+ #先sha1加密 在md5加密
|
|
|
+ $sign_str = md5(sha1(implode('&', $signature)));
|
|
|
+ return $sign_str;
|
|
|
+ }
|
|
|
+
|
|
|
+ #@todo AES加解密
|
|
|
+ #加密
|
|
|
+ private function encrypt($input, $key) {
|
|
|
+ $size = @mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
|
|
|
+ dump('size');dump($size);
|
|
|
+ $input = $this->pkcs5_pad($input, $size);
|
|
|
+ $td = @mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
|
|
|
+ $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
|
|
|
+ @mcrypt_generic_init($td, $key, $iv);
|
|
|
+ $data = @mcrypt_generic($td, $input);
|
|
|
+ @mcrypt_generic_deinit($td);
|
|
|
+ @mcrypt_module_close($td);
|
|
|
+ $data = strtoupper(bin2hex($data));
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function encrypt3($key, $iv, $data)
|
|
|
+ {
|
|
|
+ /**
|
|
|
+ * 打开加密
|
|
|
+ */
|
|
|
+ $td = @mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, "");
|
|
|
+ /**
|
|
|
+ * 初始化加密
|
|
|
+ */
|
|
|
+ @mcrypt_generic_init($td, $key, $iv);
|
|
|
+ /**
|
|
|
+ * 加密
|
|
|
+ */
|
|
|
+ $encrypted = @mcrypt_generic($td, $data);
|
|
|
+ /**
|
|
|
+ * 清理加密
|
|
|
+ */
|
|
|
+ @mcrypt_generic_deinit($td);
|
|
|
+ /**
|
|
|
+ * 关闭
|
|
|
+ */
|
|
|
+ @mcrypt_module_close($td);
|
|
|
+ return base64_encode($encrypted);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function encrypt2($input, $key)
|
|
|
+ {
|
|
|
+ $data = openssl_encrypt($input, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
|
|
|
+ $data = base64_encode($data);
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function decrypt2($sStr, $sKey)
|
|
|
+ {
|
|
|
+ $decrypted = openssl_decrypt(base64_decode($sStr), 'AES-128-ECB', $sKey, OPENSSL_RAW_DATA);
|
|
|
+ return $decrypted;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function pkcs5_pad ($text, $blocksize) {
|
|
|
+ $pad = $blocksize - (strlen($text) % $blocksize);
|
|
|
+ return $text . str_repeat(chr($pad), $pad);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function decrypt($sStr, $sKey) {
|
|
|
+ $sStr=hex2bin($sStr);
|
|
|
+ $decrypted= @mcrypt_decrypt(
|
|
|
+ MCRYPT_RIJNDAEL_128,
|
|
|
+ $sKey,
|
|
|
+ $sStr,
|
|
|
+ MCRYPT_MODE_ECB
|
|
|
+ );
|
|
|
+
|
|
|
+ $dec_s = strlen($decrypted);
|
|
|
+ $padding = ord($decrypted[$dec_s-1]);
|
|
|
+ $decrypted = substr($decrypted, 0, -$padding);
|
|
|
+ return $decrypted;
|
|
|
+ }
|
|
|
+}
|