日期: 2021/09/28 天气:阴

    中信银行API没有resfulAPI,也没有NodeSdk,只能自己写喽

    1. const {KJUR, hextob64} = require('jsrsasign')
    2. const PEM_BEGIN = '-----BEGIN PRIVATE KEY-----\n'
    3. const PEM_END = '\n-----END PRIVATE KEY-----'
    4. const rsaSign = function (content, privateKey, hash) {
    5. privateKey = _formatKey(privateKey)
    6. // 创建 Signature 对象
    7. const signature = new KJUR.crypto.Signature({
    8. alg: hash,
    9. //!这里指定 私钥 pem!
    10. prvkeypem: privateKey
    11. })
    12. signature.updateString(content)
    13. const signData = signature.sign()
    14. // 将内容转成base64
    15. return hextob64(signData)
    16. }
    17. const _formatKey = function (key) {
    18. if (!key.startsWith(PEM_BEGIN)) {
    19. key = PEM_BEGIN + key
    20. }
    21. if (!key.endsWith(PEM_END)) {
    22. key = key + PEM_END
    23. }
    24. return key
    25. }
    26. 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=`
    27. const params = {
    28. charset: 'UTF-8',
    29. version: '1.0',
    30. service: 'pay.bill.merchant',
    31. bill_date: '20210901',
    32. bill_type: 'ALL',
    33. sign_type: 'RSA_1_256',
    34. mch_id: '101520021587',
    35. nonce_str:'12345'
    36. }
    37. const formatParams = (args, join) =>{
    38. let keys = Object.keys(args)
    39. keys = keys.sort()
    40. let newArgs = {}
    41. keys.forEach(function (key) {
    42. if (args[key] != "" && args[key] != 'undefined') { //如果参数的值为空不参与签名;
    43. newArgs[key] = args[key] //参数名区分大小写;
    44. }
    45. })
    46. let string = ''
    47. for (let k in newArgs) {
    48. string += join + k + '=' + newArgs[k]
    49. }
    50. string = string.substr(1)
    51. return string
    52. }
    53. const sortString = formatParams(params, '&');
    54. console.log("=========stringSort==========", sortString);
    55. const sign = rsaSign(sortString,mchPrivateKey,'SHA256withRSA');
    56. console.log("=========sign==========",sign)