九鼎 - PHP Online

Form of PHP Sandbox

Enter Your PHP code here for testing/debugging in the Online PHP Sandbox. As in the usual PHP files, you can also add HTML, but do not forget to add the tag <?php in the places where the PHP script should be executed.



Your result can be seen below.

Result of php executing





Full code of 九鼎.php

  1. <?php
  2.  
  3. //请求格式
  4. $data = [
  5.     'merId' => '20200676',               //商户号
  6.     'orderId' => 'to000000001',            //订单号,值允许英文数字
  7.     'orderAmt' => '123',              //订单金额,单位元保留两位小数
  8.     'channel' => 'bank',            //支付通道编码
  9.     'desc' => 'payment',           //简单描述,只允许英文数字 最大64
  10.     'ip' => '150.242.158.33',  
  11.     'bankcode' => 'CCB',
  12.     'notifyUrl' => "https://httpbin.org/post",   //异步返回地址
  13.     'returnUrl' => "https://httpbin.org/post",     //同步返回地址
  14.     'nonceStr' => "43121113432"   //随机字符串不超过32位
  15. ];
  16. $privateKey = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCCNRPik6EqgRBxaTqkWOkkGLorW3N1vEc7NVouSqgGkk3LfKfMjHOFgg28k939GAIJedIn3npBLa7UuCgptAn42nfzxCJSbOShKRb7age8Fn+W3vBLH+u/dyaDttDcP3yTaHRu9rtRO7STJQ81R768lt2anjXtJ2esYc0QeCfBKEtIT1XYpzyU5yFF0yxkc6sggysZpbzKlG+ckzu1Z3Y/DagMNW9rw3EPD4OosE0I9t4vB0skaNh7BOX7SIzG9nvL9xuND7lYxTFJJMHiYwF9uCUY27Oa5ilS0qONPQK9MsS5Hgd9ZzOw2CZ450A3B3rRXK6DdeEiM1KacWvyVGvxAgMBAAECggEAHI7Tq7BBevcPyjAQQpeVmuspefT23+3Jmbzb6KdLLxXLpkPS8dQkSjX6GVA9MhOf7sAfTctH+R+x5sn1VSA9x6zy/i4YcQedJZPDjKT2yVQN6+M9xNxdcoMJmX3xVT0/b31LfEL1Vp3HvzYznbX8qZRVSmJE5Zzs6iwRM/mGjqCdg063g3O1nbmP6VZWSypXsF5iwRtp/EYGw5H2wO8bFBkkO2vThhN8xytjNpeVfda8kRnKwqiI2WTVk5wxLfB7QCJyNX5JgepM4Hg1mE2LF9RlsoJBzHQeBcgAjNhCCYt14yYFY18J7fT1t/dhIUHAj7M1QsG8gzYOcsJSVrr72QKBgQDEqG9mY5K/zB65wHKqEzjPcT8bxsRKUdQsMFECtAWevxdFM2UPeSU/CkPDIwef4VgNmRAfYqz6RpkXUIPPsRKSDA4vaJkbL9A6NHUaSo5awjzQ4mth4n9xgSSyDJfZC72sj9vdgW85TwldUJe7lwwOECfozhNIC7I3BuTOMzTGfwKBgQCpf2vDrXHK34XfeQMxCqfW+FtDlk5abw/tMcIFYE/IRMs+nItKgZ0ckFoCz6CNtnO1IDMoQgyXZMxtPSJ53lRO5ivGWdAl+ZX9DR2KcmjXON9t4OFxRFFNUUT3OORxk93Bc5lH2DLewklArmZd0tTjKje2LcxUrk5bADY37R71jwKBgQCGe6zatwM22A629i0zsztpWMdQZmf7buQKZ+wuTg991K3EK/ZTU4QuDQXz3vOq2P5PJjoJTICAEmFEuVG6aRwK9eWJdB0no1XhR9hA53VcCXJvYjcO1EZUx3zhqYz553aJGEPBwW7fIPaFcsSgixW6VEAGi05SOXVg/fzgKdJQXwKBgB/jkzjLZv9OMneq4sjVQmKVc0Yx/yfQgWSU2fX8+sWo+7wZ47Lu08pN9kFVItXGn9pR5o4KbygElNlwiQ34oE//yfiVaS3b2TY0w3wKrmLfllmr135h5hHv2lPQ5lngAfalcw8rQ9bZIsMCjMvWIKtkg/rIfwrniGJildDL0elNAoGAWfbqHIoQdWTma/GjEfcStDwecTAD5dL6N/IyfrR9zomUriA5Y9x0XfT/ku/apoVXcBpbCCryyYuLRKIJTbo4B2JCMXuTRwBTyF3mYEAtobFidWg8OzFqI3hzYbXuj4XjMepCk4Ga5mtJ1hoO14c8tSIpdK6OV2RuMnBlOKTf4Qg=';
  17. $md5Key = 'rUyqobxtSQsVIdjCaDPGmOTkLcKAulfM';
  18.  
  19.  
  20. class Rsa
  21. {
  22.     public $publicKey = '';
  23.     public $privateKey = '';
  24.     private $_privKey;
  25.  
  26.     /**
  27.      * * private key
  28.      */
  29.     private $_pubKey;
  30.  
  31.     /**
  32.      * * public key
  33.      */
  34.     private $_keyPath;
  35.  
  36.     /**
  37.      * * the keys saving path
  38.      */
  39.  
  40.     /**
  41.      * * the construtor,the param $path is the keys saving path
  42.      * @param string $publicKey  公钥
  43.      * @param string $privateKey 私钥
  44.      */
  45.     public function __construct($publicKey = null, $privateKey = null)
  46.     {
  47.         $this->setKey($publicKey, $privateKey);
  48.     }
  49.  
  50.     /**
  51.      * 设置公钥和私钥
  52.      * @param string $publicKey  公钥
  53.      * @param string $privateKey 私钥
  54.      */
  55.     public function setKey($publicKey = null, $privateKey = null)
  56.     {
  57.         if (!is_null($publicKey)) {
  58.             $this->publicKey = $publicKey;
  59.         }
  60.         if (!is_null($privateKey)) {
  61.             $this->privateKey = $privateKey;
  62.         }
  63.     }
  64.  
  65.     /**
  66.      * * setup the private key
  67.      */
  68.     private function setupPrivKey()
  69.     {
  70.         if (is_resource($this->_privKey)) {
  71.             return true;
  72.         }
  73.         $pem = chunk_split($this->privateKey, 64, "\n");
  74.         $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n";
  75.         $this->_privKey = openssl_pkey_get_private($pem);
  76.         return true;
  77.     }
  78.  
  79.     /**
  80.      * * setup the public key
  81.      */
  82.     private function setupPubKey()
  83.     {
  84.         if (is_resource($this->_pubKey)) {
  85.             return true;
  86.         }
  87.         $pem = chunk_split($this->publicKey, 64, "\n");
  88.         $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n";
  89.         $this->_pubKey = openssl_pkey_get_public($pem);
  90.         return true;
  91.     }
  92.  
  93.     /**
  94.      * 构造签名
  95.      * @param string $dataString 被签名数据
  96.      * @return string
  97.      */
  98.     public function sign($dataString)
  99.     {
  100.         $this->setupPrivKey();
  101.         $signature = false;
  102.         openssl_sign($dataString, $signature, $this->_privKey,OPENSSL_ALGO_SHA256);
  103.         return base64_encode($signature);
  104.     }
  105.  
  106.     /**
  107.      * 验证签名
  108.      * @param string $dataString 被签名数据
  109.      * @param string $signString 已经签名的字符串
  110.      * @return number 1签名正确 0签名错误
  111.      */
  112.     public function verify($dataString, $signString)
  113.     {
  114.         $this->setupPubKey();
  115.         $signature = base64_decode($signString);
  116.         $flg = openssl_verify($dataString, $signature, $this->_pubKey,OPENSSL_ALGO_SHA256);
  117.         return $flg;
  118.     }
  119.  
  120.     public function __destruct()
  121.     {
  122.         is_resource($this->_privKey) && @openssl_free_key($this->_privKey);
  123.         is_resource($this->_pubKey) && @openssl_free_key($this->_pubKey);
  124.     }
  125. }
  126.  
  127.  
  128. function sign($data,$md5Key,$privateKey){
  129.     ksort($data);
  130.     reset($data);
  131.     $arg = '';
  132.     foreach ($data as $key => $val) {
  133.         //空值不参与签名
  134.         if ($val == '' || $key == 'sign') {
  135.             continue;
  136.         }
  137.         $arg .= ($key . '=' . $val . '&');
  138.     }
  139.     $arg = $arg . 'key=' . $md5Key;
  140.     
  141.     //print($arg.PHP_EOL);
  142.     //签名数据转换为大写
  143.     $sig_data = strtoupper(md5($arg));
  144.     //print($sig_data.PHP_EOL);
  145.     //使用RSA签名
  146.     $rsa = new Rsa('', $privateKey);
  147.     //私钥签名
  148.     return $rsa->sign($sig_data);
  149. }
  150.  
  151. //私钥签名
  152. $data['sign'] = sign($data,$md5Key,$privateKey);
  153.  
  154. print($data['sign'].PHP_EOL);
File Description
  • 九鼎
  • PHP Code
  • 04 Jul-2020
  • 5.6 Kb
You can Share it: