Node js,签署 utf 8 行并在发布请求中发送

问题描述

这个 api https://spectrocoin.com/en/integration/spectrocoin.html 有完美的 Java 和 PHP 示例。

我想发出一个 nodejs“createOrder”发布请求,但我收到一条错误消息,指出 [ { code: 99,message: 'Please check your request' } ]

我创建签名和发送post请求的代码如下

const axios = require("axios");
const fs = require("fs");
const crypto = require("crypto");

function createOrder() {
  var privateKey = fs.readFileSync("./keys/private.pem");
  const dataToSign =
    "merchantId=" +
    merchantId +
    "&apiId=" +
    apiId +
    "&orderId=&payCurrency=BTC&payAmount=0.0&receiveCurrency=USD&receiveAmount=9.99&description=Order+%27Order001%27+at+www.merchant.com&culture=en&callbackUrl=https%3A%2F%2Fmerchant.com%2Fcallback.PHP&successUrl=https%3A%2F%2Fmerchant.com%2Fsuccess.PHP&failureUrl=https%3A%2F%2Fmerchant.com%2Ffailure.PHP";
  const signature = crypto.sign("sha1",Buffer.from(dataToSign),{
    key: privateKey,padding: crypto.constants.OPENSSL_ALGO_SHA1,});

  console.log(signature.toString("base64"));

  var order = dataToSign + "&sign=" + signature;

  axios
    .post(
      "https://spectrocoin.com/api/merchant/1/createOrder",encodeURI(order),{
        "Content-Type": "application/x-www-form-urlencoded",Connection: "Keep-Alive","Accept-Encoding": "gzip,deflate",},)
    .then((r) => {
      console.log(r.data);
    })
    .catch((e) => console.log(e));
}

createOrder();

我用这段 JS 代码生成的签名与我使用 PHP生成的签名相同。如前所述,PHP 示例完美运行。 我错过了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)