Sign.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace addons\AvoidTax\common\jdk\socialwork;
  3. /**
  4. * 一户一码
  5. */
  6. class Sign{
  7. const BUS_CODE_AUTH = "AUTHORIZE";
  8. const BUS_CODE_CREATE_ORDER = "CREATEORDER";
  9. const BUS_CODE_CREATE_ORDER_DETAIL = "ADDFREEDOMEEMP"; // 添加个人发放明细
  10. const BUS_CODE_ORDER_DETAIL_QUERY = "FREEDOMEMOSTATUS"; // 6.个人发放状态查询
  11. public $method = "aes-192-cbc";
  12. public $config = [
  13. 'url'=>'http://47.110.250.177:20000/socialwork/v1/external/atandard',
  14. 'aes_key'=>'fbb416bfd0a242419e6528f2',
  15. 'aes_iv'=>'0f6ce46636264d66',
  16. 'ptcode'=>'751219023890354176',
  17. 'mer_rsa_private_key'=>"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK3DPc+pT0PywNkx".
  18. "7JWJLM66/apoUTEAUW/W7uOZbrb097GYUiTY0JDnFw6hUCCJEywSMfAQvUY5GP2a".
  19. "dCGu5Szw5F4qmE020dV1EywqREwGltWNbhcLNDvK5uHGxgk+b9RE7SrHBh+lziOE".
  20. "Ejt8i5YOezBy/e4rWLa5ELwj/6WTAgMBAAECgYBWjR3IxkjZS52LkjaJ9Z4AC1w2".
  21. "+WcXxVTLJIAxlkdzkmmeaITiHa0lwDXX77n9usl19koxjeT5iY9NIxYdgQRdn6z8".
  22. "+QJ5XSEJjUVwqFqPhtIzYNVRAZHWKxRjQZ4UtmCjvbeiAqLr+SDRBKLcobJLiXwy".
  23. "4//AllAa7SU42TAqgQJBAOJW+9N+Pw8PVozJOD4e4Qi4EFF1b5vcQ+jcYp+8LiJd".
  24. "g1X1COGOxvIVeK22tpwNXKUoPSkHQ82BPOmcqrOxllECQQDEiHREeR1/apxoP+5b".
  25. "KogvY0k1wT4TgVB2BLzm2P8eCYQr5GdUML8WzxRBk6CyU6WyqodhB7m4lf/m2nCf".
  26. "sfCjAkEAvfIPnjqJgwL1OGs5lvBlG+MUVrg+NMfR+d7RqYnMEaz2pjFgBaLDlK+u".
  27. "OeJnN2kDQdsWEJN3NERsMQT4QJsdMQJAe9hI/AUeU3aJDSCMQSKyIrp8HcWiKoRo".
  28. "gZZGu2muie0RPt91RZZaNDNV3mT69KTFW6seGETYAbt0QLMSGW/15QJAJ+s5FLIj".
  29. "GoU63WHza9xbCY/vLPFeiBXNH3qwPLp3ME5zbxS/LlCxTfG+Q+201iuVzSgHD98u".
  30. "IA1pU0FOUUfpiw==",
  31. 'mer_rsa_public_key'=>"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtwz3PqU9D8sDZMeyViSzOuv2q".
  32. "aFExAFFv1u7jmW629PexmFIk2NCQ5xcOoVAgiRMsEjHwEL1GORj9mnQhruUs8ORe".
  33. "KphNNtHVdRMsKkRMBpbVjW4XCzQ7yubhxsYJPm/URO0qxwYfpc4jhBI7fIuWDnsw".
  34. "cv3uK1i2uRC8I/+lkwIDAQAB",
  35. ];
  36. public function sendEncodeData(array $json,$bussiness_code){
  37. // $bussiness_code = $json['items']['bussiness_code'];
  38. // unset($json['items']['bussiness_code']);
  39. // echo "<pre>";
  40. $json_content = json_encode($json,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
  41. // $json_content = '{"items":{"payer_object_type":"customer","settlement_org_id":"635981601368444928","bill_month":1638288000,"name":"格式网络1","service_contract_no":"新服务合同543534543"}}';
  42. //aes密钥
  43. $aes_key = $this->config['aes_key'];
  44. $aes_iv = $this->config['aes_iv'];
  45. $private_rsa_key = $this->config['mer_rsa_private_key'];
  46. // var_dump("AES 加密之前的数据 ");
  47. // var_dump($json_content);
  48. // echo "<pre>";
  49. // echo "<h1>加密参数</h1>";
  50. // var_dump($json);
  51. // echo ($json_content);
  52. //aes 加密
  53. $data['data'] = $this->aesEncode($json_content, $aes_key,$aes_iv);
  54. // echo "<h1>AES 加密之后</h1>";
  55. // echo ( $data['data'] );
  56. // var_dump( $private_rsa_key );
  57. //用商户ras私钥签名
  58. $data['sign'] = $this->sign($data['data'], $private_rsa_key);
  59. // echo ("<h1>---数字签名---</h1>");
  60. // echo ($data['sign']);
  61. $data['ptcode'] = $this->config['ptcode'];
  62. $data['bussiness_code'] = $bussiness_code;
  63. // echo "<h1>请求数据</h1>";
  64. // var_dump($data);
  65. //发送请求
  66. // echo json_encode($data,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
  67. $request_result = $this->httpPost(json_encode($data,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE), $this->config['url']);
  68. // echo "<hr>";
  69. // echo "<h1>响应数据</h1>";
  70. // var_dump($request_result);
  71. // exit;
  72. //解密返回报文
  73. $result_json = json_decode($request_result,true);
  74. //用aes密钥解密报文
  75. $decode_content = $this->aesDecode($result_json['data'],$aes_key,$aes_iv);
  76. // var_dump($decode_content);
  77. return json_decode($decode_content,true);
  78. //
  79. }
  80. // ras生成签名
  81. protected function sign($data, $private_rsa_key)
  82. {
  83. $priKey = $private_rsa_key;
  84. $res = "-----BEGIN PRIVATE KEY-----\n" .
  85. wordwrap($priKey, 64, "\n", true) .
  86. "\n-----END PRIVATE KEY-----";
  87. // 生成密钥资源id
  88. $private_key_resource_id = openssl_get_privatekey($res);
  89. if (empty($private_key_resource_id))
  90. {
  91. throw new \Exception("秘钥不能为空");
  92. }
  93. $verify = openssl_sign($data, $signature, $private_key_resource_id, OPENSSL_ALGO_MD5);
  94. openssl_free_key($private_key_resource_id);
  95. if(!$verify){
  96. throw new \Exception("签名失败");
  97. }
  98. // 二次Base64编码
  99. return base64_encode($signature);
  100. }
  101. // AES加密
  102. private function aesEncode($data, $aes_key,$iv){
  103. $encrypt_data = openssl_encrypt($data, $this->method, $aes_key, OPENSSL_RAW_DATA, $iv);
  104. return base64_encode($encrypt_data);
  105. }
  106. // AES解密
  107. private function aesDecode($data,$aes_key,$iv){
  108. $data = base64_decode($data);
  109. return openssl_decrypt($data, $this->method, $aes_key, OPENSSL_RAW_DATA, $iv);
  110. }
  111. private function httpPost($data,$url){
  112. $ch = curl_init();
  113. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
  114. curl_setopt($ch,CURLOPT_TIMEOUT,600);
  115. curl_setopt($ch,CURLOPT_URL,$url);
  116. curl_setopt($ch,CURLOPT_POST,true);
  117. curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
  118. curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  119. if (strpos($url, 'https') !== false) {
  120. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  121. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  122. curl_setopt($ch, CURLOPT_SSLVERSION, 1);
  123. }
  124. $ret_data = trim(curl_exec($ch));
  125. curl_close($ch);
  126. return $ret_data;
  127. }
  128. }