pay_pub; $begin_public_key = "-----BEGIN PUBLIC KEY-----\r\n"; $end_public_key = "-----END PUBLIC KEY-----\r\n"; $str = sprintf($begin_public_key); $raw = strlen($devPubKey) / 64; $index = 0; while ($index <= $raw) { $line = substr($devPubKey, $index * 64, 64) . "\r\n"; if (strlen(trim($line)) > 0) { $str .= sprintf($line); } $index++; } sprintf($end_public_key); } function getPayPrivKey() { $priKey = $this->pay_key; if (strpos($priKey, "BEGIN RSA PRIVATE KEY") === false) { $priKey = wordwrap($priKey, 64, "\n", true); $priKey = "-----BEGIN PRIVATE KEY-----\n" . $priKey . "\n-----END PRIVATE KEY-----"; } return $priKey; } /** * 创建支付签名 * @param array $data */ function paySign($data) { unset($data['sign']); ksort($data); # 除sign以外的所有字段, 字典排序 $arr = array(); foreach ($data as $key => $val) { if ($val) { array_push($arr, $key . '=' . urldecode($val)); # 排序后的数组, 需要对value进行urldecode } } $query_string = join('&', $arr); # 重新拼接为字符串 $key = openssl_pkey_get_private($this->getPayPrivKey()); $str = loyalsoft\CommUtil::str2UTF8($query_string); \loyalsoft\CLog::warn("待签名串:$str"); $r = openssl_sign($str, $sign, $key, 'RSA-SHA256'); # 签名算法 if ($r) { return base64_encode($sign); } die("gen signature failed!"); } } //include_once __DIR__ . '/../../../main.php'; # 导入game utils //$sign = 'S6mnrL/LC1zUlk4IGEJrzDCFSGReHRyEapQ94fKyQ9KoFXdgbdP2KiRiUwKkbzW2C+Wxd/PtwQIWfLF911dyyQ=='; //$str = 'amount=0.01&applicationID=100218075&country=CN¤cy=CNY&merchantId=220086000021803768&productDesc=立刻购买尊享9折优惠&productName=60钻石&requestId=1803200947000321&sdkChannel=1&url=http://115.159.121.129/ylsj/Gameserver/Amfphp/service_call/pay/huawei/notify.php&urlver=2'; //\loyalsoft\echoLine(config_for_huawei::Inst()->test($str)); //\loyalsoft\echoLine($sign);