OriginBank.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace App\Libs\Pay\Merchants;
  3. use GuzzleHttp\Client;
  4. use Log;
  5. class OriginBank
  6. {
  7. function __construct($config)
  8. {
  9. $this->open_id = $config['open_id'];
  10. $this->open_key = $config['open_key'];
  11. $this->sub_appid = $config['sub_appid'];
  12. $this->PayClient = new client(['base_uri'=>'https://api.orangebank.com.cn/','timeout'=>3]);
  13. }
  14. //生成订单
  15. function send($data)
  16. {
  17. $time = time();
  18. $base_data = [
  19. 'open_id'=>$this->open_id,
  20. 'timestamp'=>$time,
  21. ];
  22. // $data = [
  23. // 'out_no'=>$data['trade_no'],
  24. // 'pmt_tag'=>'Weixin',
  25. // 'ord_name'=>'小说充值',
  26. // 'original_amount'=>$data['price'],
  27. // 'trade_amount'=>$data['price'],
  28. // //'notify_url'=>env('ORIGINBANK_NOFITY_URL'),
  29. // 'sub_appid'=>$this->sub_appid,
  30. // 'sub_openid'=>$data['openid']
  31. // ];
  32. $data =[];
  33. $data['out_no'] = "123456";
  34. $data['pmt_tag'] = "WeixinBERL";
  35. $data['original_amount'] = "1";
  36. $data['trade_amount'] = "1";
  37. $data['ord_name'] = "购买物品订单名称";
  38. dump($data);
  39. $base_data['data'] = $this->encrypt(json_encode($data),$this->open_key);
  40. dump($data);
  41. $base_data['sign'] = $this->signs($data);
  42. dump('base_data');dump($base_data);
  43. $response = $this->PayClient->request('POST','mct1/payorder',['form_params'=>$base_data])->getBody()->getContents();
  44. dd(json_decode($response,1));
  45. // return $this->getPayInfo($response);
  46. }
  47. function getPayInfo($response)
  48. {
  49. try{
  50. $return_info = json_decode($response,1);
  51. //dd($return_info);
  52. if($return_info['errcode'] == 0)
  53. {
  54. $pay_info = [
  55. 'appId'=>$return_info['data']['appId'],
  56. 'timeStamp'=>$return_info['data']['timeStamp'],
  57. 'nonceStr'=>$return_info['data']['nonceStr'],
  58. 'signType'=>$return_info['data']['signType'],
  59. 'package'=>$return_info['data']['package'],
  60. 'paySign'=>$return_info['data']['paySign']
  61. ];
  62. return $pay_info;
  63. }
  64. }catch (\Exception $e)
  65. {
  66. return null;
  67. }
  68. }
  69. //签名
  70. public function signs($array){
  71. $signature = array();
  72. foreach($array as $key=>$value){
  73. $signature[$key]=$key.'='.$value;
  74. }
  75. $signature['open_key']='open_key'.'='.$this->open_key;
  76. ksort($signature);
  77. #先sha1加密 在md5加密
  78. $sign_str = md5(sha1(implode('&', $signature)));
  79. return $sign_str;
  80. }
  81. #@todo AES加解密
  82. #加密
  83. private function encrypt($input, $key) {
  84. $size = @mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
  85. dump('size');dump($size);
  86. $input = $this->pkcs5_pad($input, $size);
  87. $td = @mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
  88. $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  89. @mcrypt_generic_init($td, $key, $iv);
  90. $data = @mcrypt_generic($td, $input);
  91. @mcrypt_generic_deinit($td);
  92. @mcrypt_module_close($td);
  93. $data = strtoupper(bin2hex($data));
  94. return $data;
  95. }
  96. private function pkcs5_pad ($text, $blocksize) {
  97. $pad = $blocksize - (strlen($text) % $blocksize);
  98. return $text . str_repeat(chr($pad), $pad);
  99. }
  100. }