Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否从[对象承诺]获取数据?_Android_Node.js_Square Connect - Fatal编程技术网

Android 是否从[对象承诺]获取数据?

Android 是否从[对象承诺]获取数据?,android,node.js,square-connect,Android,Node.js,Square Connect,如何从[对象承诺]获取信息? 我正在使用GCF(云函数)处理平方付款 从现在起,我得到了{response=“OK:[对象承诺]”} 这是在云平台上处理云功能: const functions = require('firebase-functions'); const SquareConnect = require('square-connect'); const crypto = require('crypto'); exports.fxtest = functions.https.onC

如何从
[对象承诺]
获取信息? 我正在使用GCF(云函数)处理平方付款

从现在起,我得到了
{response=“OK:[对象承诺]”}

这是在云平台上处理云功能:

const functions = require('firebase-functions');
const SquareConnect = require('square-connect');
const crypto = require('crypto');

exports.fxtest = functions.https.onCall((data, context) => {
  const defaultClient = SquareConnect.ApiClient.instance;
  defaultClient.basePath = "https://connect.squareupsandbox.com";
  const oauth2 = defaultClient.authentications['oauth2'];
  oauth2.accessToken = 'sandbox-token-ommitted';
  const idempotency_key = crypto.randomBytes(23).toString('hex');
  const payments_api = new SquareConnect.PaymentsApi();

  const item_source = data.source_id;
  const item_price = 1.00;
  const item_currency = 'USD';
  const request_body = {
      "idempotency_key": idempotency_key,
      "source_id": item_source,
      "amount_money": {
          "amount": item_price,
          "currency": item_currency
      }
  };

  var rsp;
  try{
    const response = payments_api.createPayment(request_body)
    .then(
        r=> { return r; })
    .catch(
        e => { return e; });
    const json = JSON.stringify('OK:' + response);
    rsp = json;
  } catch(error){
      return rsp = 'ERROR:' + error;
  }

  return{
      response: rsp
  };
});
这是在Android设备上处理返回数据的过程:

private FirebaseFunctions mFunctions;
private Task<HttpsCallableResult> fxtest(String text, Context ctx, CardDetails crds){
Map<String, Object> data = new HashMap<>();
data.put("source_id",crds.getNonce());

return this.mFunctions.getHttpsCallable("fxtest").call(data)
  .addOnCompleteListener((Activity) ctx, new OnCompleteListener<HttpsCallableResult>() {
      @Override public void onComplete(@NonNull Task<HttpsCallableResult> task) {
        Toast.makeText(ctx, "result: " + task.getResult().getData(),Toast.LENGTH_LONG).show();
        }
       });
   }
私有FirebaseFunctions MFFunctions;
专用任务fxtest(字符串文本、上下文ctx、CardDetails CRD){
映射数据=新的HashMap();
data.put(“source_id”,crds.getNonce());
返回此.mFunctions.getHttpScalable(“fxtest”).call(数据)
.addOnCompleteListener((活动)ctx,新OnCompleteListener(){
@覆盖已完成的公共void(@NonNull任务){
Toast.makeText(ctx,“结果:+task.getResult().getData(),Toast.LENGTH\u LONG.show();
}
});
}
我看到的一些消息来源:


我找到了问题的解决方案,基本上我的“凭证访问令牌使用授权访问令牌”是第一个错误,另一个错误是由于itempotency密钥,根据API参考,该密钥的最大限制为45个字符,另一个问题是我如何返回响应,就我所做的承诺而言,响应应该是JSON格式的。这是源代码(java很好,不需要编辑),它只在nodejs端。API键在GCF平台的环境变量端引用。这将有效地允许使用“无服务器方法”通过android应用程序处理方形付款

const functions = require('firebase-functions');
const SquareConnect = require('square-connect');
const crypto = require('crypto');

exports.fxtest = functions.https.onCall(async (data, context) => {
    /* testing url for sandbox */
    //defaultClient.basePath = process.env.TESTING_SQUARE_CONNECT_URL;

    const defaultClient = SquareConnect.ApiClient.instance;
    defaultClient.basePath = process.env.PRODUCTION_SQUARE_CONNECT_URL;
    const oauth2 = defaultClient.authentications["oauth2"];
    oauth2.accessToken = process.env.PRODUCTION_APPLICATION_ACCESS_TOKEN;
    const idempotency_key = crypto.randomBytes(16).toString("hex");
    const payments_api = new SquareConnect.PaymentsApi() ;

    /* value of ammount is in cents as of 11/29/2019
        , 1 is equal to 1 cent, 100 is equal to 100 cents */
    const request_body = {
        "idempotency_key": idempotency_key,
        "source_id": data.source_id,
        "amount_money": {
            "amount": 100,
            "currency": "USD"
        },
    };

    try{
        response = await payments_api.createPayment(request_body)
        .then( 
            r=> {
                if(r.ok) { return Promise.resolve(r); }
                return Promise.reject(Error("TRY ERROR_ON_RESPONSE: " + JSON.stringify(r)))
        })
        .catch( 
            e=> {
                return Promise.reject(Error("TRY ERROR_ON_EXCEPTION: " + JSON.stringify(e)))
        });
        return "TRY OKAY: " + JSON.stringify(response);
    } catch(error){
        return "CATCH ERROR: " + JSON.stringify(error);
    }
});