日期: 2021/09/28 天气:阴
中信银行API没有resfulAPI,也没有NodeSdk,只能自己写喽
const {KJUR, hextob64} = require('jsrsasign')const PEM_BEGIN = '-----BEGIN PRIVATE KEY-----\n'const PEM_END = '\n-----END PRIVATE KEY-----'const rsaSign = function (content, privateKey, hash) {privateKey = _formatKey(privateKey)// 创建 Signature 对象const signature = new KJUR.crypto.Signature({alg: hash,//!这里指定 私钥 pem!prvkeypem: privateKey})signature.updateString(content)const signData = signature.sign()// 将内容转成base64return hextob64(signData)}const _formatKey = function (key) {if (!key.startsWith(PEM_BEGIN)) {key = PEM_BEGIN + key}if (!key.endsWith(PEM_END)) {key = key + PEM_END}return key}const mchPrivateKey = `MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCfU8v4BUr81SKm/H0ahbdQZjEpO8nMyk+xuYSatHwnU4//m47R+4G2YB4Z6PHsJi4+ScfJpQutFhKrFwTXZ6TDqLvaqZDDkJq5G271g+PmrzFp7f40/E9m0qjeL64RJra0rZql23dvPW4vVomMRgRcoPOn0YWVp+M6T5PaFgE4M8dh4lMZz57gVwOdd08F99Z92f3QgZtEjI+/EXvMenXxb/aRofNkt+Wdk2ELJ6MIP0d9UU5v3WgLuuNv5QnQYzj/RMr8GD+wrDYiNQJxsaTmE/OEJggsumhD4eYY5YlRy2EIN504cujYVKU1wOSZgq9oJCynGR0aPuQWx58IHxEtAgMBAAECggEAHfEFd8qm2PTE2lTAvec7F+TcgD84IUAz0dZnURtx6YIOoZ5+LH/zVG6juYLJU/Oo5RPAc+iMVS68u2JMCp7zm8Ft7B3JkrbuHLNHGuR6Q7PQuXN8PkDcOxqDmZ2kPJzl4PZvBZRE0abdug+tMatGzpGAuJzrWcB/N0oVIvrXp9PnOqfo/Y5nxmpOFCImJppIS3AL1pftNtQZo9G15CPHDYtpUbXPtD2MjjW4OLxKuPRoHSwUgo6LW9XSwNXfcuK+lbzLL0BhlWD9IV/+yCEUEblN87yxxfhpQFaAhXj5W+B3YsMOZuK93+XMOpYmw8EpUDMObOnvwb0NSHUrV2RUAQKBgQDTojlnNS1e7+tjPzFtOhGPj1uCBPAEIeHAcnPgd80bEiujxMLCnGaAvmnTrMu4Xo0e5fAP4F7R6UD+IUsfr3CAAu7CadQ49TW+SovAvciy9AZuSVVIwynu6QdYgFyPKe1LZYAEq5k+mB1Vh5q0RoxMNAA5pGYKg8+4MmmsJi7X7QKBgQDAunCOqIiH128bs/1VRIhDpzuRW5Qr/SRbO2saVg5RSHnO/nGT2OuxSTTkc8yrx7qd9SmAxXl5kR238DhMOQOnRBomldmVtAJuJgrdQyt0wXfeQVQqshqCUaE/xhEbpSCdbPSZbKZZdplV0y6O5vXIhxw+1qAvXLcxw46s3R92QQKBgQClQ+ejywkVPDILHMwSSehwvThufkCYWYUbbcVDowpOe5AMoZidtNju7MNjg2rLHTsCx/kBzOr+7THNwl4R7kTiEmg09cO+fu5rHXepGgtig+GJukaZPZ6/bMZJvGOLgOhHmomwG/jdwpgVtIGBCh6BW5JZcSImT+ykIOoYfvDRuQKBgCgwOHxnBGFfORoLxE3dhpSk8LT05cbueIBVuZW6UC3+8PeK82AjIbLMUy04QHupoG6Dyu3BP/1rl0jd3L94PBzLBLD7Gm4vJTqW0DknYo5sMXS1JrnofcKjBv7nbHXZTx3EtJSxpVaOdpcA/HpsCuCP3AH2e1yk9sZ3wu6lBYSBAoGACYM60j1CVRNSZxUNRgiwfWzS69qI1eezPc7xQEganpVBI9SZcTNp1kpDKmQikXJ4Yb5XWn12HCY/sFeBW6Su3ruNqxvg1XiUPbH6A6nxd5B3QX0mS9+wDm6ONysPLRdKbfFO0mdP4CeyuGPdvDIMXP4dJdLhMUL4pcJLI0B7gBE=`const params = {charset: 'UTF-8',version: '1.0',service: 'pay.bill.merchant',bill_date: '20210901',bill_type: 'ALL',sign_type: 'RSA_1_256',mch_id: '101520021587',nonce_str:'12345'}const formatParams = (args, join) =>{let keys = Object.keys(args)keys = keys.sort()let newArgs = {}keys.forEach(function (key) {if (args[key] != "" && args[key] != 'undefined') { //如果参数的值为空不参与签名;newArgs[key] = args[key] //参数名区分大小写;}})let string = ''for (let k in newArgs) {string += join + k + '=' + newArgs[k]}string = string.substr(1)return string}const sortString = formatParams(params, '&');console.log("=========stringSort==========", sortString);const sign = rsaSign(sortString,mchPrivateKey,'SHA256withRSA');console.log("=========sign==========",sign)
