Angular 贝宝-从服务器发送金额

Angular 贝宝-从服务器发送金额,angular,paypal,Angular,Paypal,这是我第一次尝试在我的网站上实现支付,我发现paypal几乎没有什么不好掌握的地方 在我的应用程序中,用户可以上传他想要翻译的任意多个视频。 每个视频可以翻译成多种语言。 根据视频持续时间和用户选择的请求语言计算总价格 以最简单的方式,我将此代码添加到我的站点 基本上,当用户单击支付按钮并获取返回url和取消url 从前端使用window.location例如:window.location.origin+'/success url',以便在本地服务器上测试时不会出现问题, 舞台与制作。然后,

这是我第一次尝试在我的网站上实现支付,我发现paypal几乎没有什么不好掌握的地方

在我的应用程序中,用户可以上传他想要翻译的任意多个视频。 每个视频可以翻译成多种语言。 根据视频持续时间和用户选择的请求语言计算总价格

以最简单的方式,我将此代码添加到我的站点


基本上,当用户单击支付按钮并获取
返回url
取消url
从前端使用window.location例如:window.location.origin+'/success url',以便在本地服务器上测试时不会出现问题, 舞台与制作。然后,当用户被重定向到
https://example.com/success-url
paymentId
PayerID
将通过 payapal,然后从该页面可以在后端调用
executeOrder

这里是链接到

下面是一个示例nodejs代码:

exports.createOrder = (data, callback) => {
  /* First step when user clicks 'Pay with paypal' on place-order screen */
  var create_payment_json = {
    "intent": "sale",
    "payer": {
      "payment_method": "paypal"
    },
    "redirect_urls": {
      "return_url": data.return_url,
      "cancel_url": data.cancel_url
    },
    "transactions": [{
      "amount": {
        "total": getAmountFromNoOFVideos(),
        "currency": "USD"
      },
      "description": "Video Translation"
    }]
  };

  paypal.payment.create(create_payment_json, function (error, payment) {
    if (error) {
      callback(error);
    } else {
      if(payment.payer.payment_method === 'paypal') {
        for(var i=0; i < payment.links.length; i++) {
          var link = payment.links[i];
          if (link.method === 'REDIRECT') {
            redirectUrl = link.href;
          }
        }
      }
      callback(null, redirectUrl, payment.id)
    }
  });
}

exports.executeOrder = (data, callback) => {
  /* Second and final step in place-order screen */
  let paymentId = data.paymentId;
  let PayerID = data.PayerID;

  var details = { "payer_id": PayerID };
  paypal.payment.execute(paymentId, details, function (error, payment) {
    if (error) {
      console.log("\x1b[31m", "PAYPAL ERROR: ", error)
      callback(error);
    } else {
      callback(null, true);
    }
  });
}
exports.createOrder=(数据,回调)=>{
/*用户在下订单屏幕上单击“使用paypal支付”时的第一步*/
var create\u payment\u json={
“意图”:“出售”,
“付款人”:{
“付款方式”:“贝宝”
},
“重定向URL”:{
“return\u url”:data.return\u url,
“取消url”:data.cancel\u url
},
“交易”:[{
“金额”:{
“总计”:getAmountFromNoOFVideos(),
“货币”:“美元”
},
“说明”:“视频翻译”
}]
};
paypal.payment.create(创建付款,函数(错误,付款){
如果(错误){
回调(错误);
}否则{
如果(payment.payer.payment_method==='paypal'){
对于(变量i=0;i{
/*第二步和最后一步到位订单屏幕*/
让paymentId=data.paymentId;
设PayerID=data.PayerID;
var详细信息={“付款人\用户id”:PayerID};
paypal.payment.execute(paymentId、详细信息、函数(错误、付款){
如果(错误){
log(“\x1b[31m”,“PAYPAL错误:”,错误)
回调(错误);
}否则{
回调(null,true);
}
});
}
贝宝流量: -假设您的网站链接是
www.videotranslate.com

  • 用户在您的网站
    www.videotranslate.com
  • 您对API
    www.videotranslate.com/API/createOrder
    从您的角度组件/服务(取决于您的设计)
  • 在AJAX调用的success函数中,您可以得到
    redirectUrl
    从后端的
    createOrder
    函数
  • 当用户通过paypal成功付款时,paypal将 将用户重定向到
    www.videotranslate.com/success callback
  • 现在在本页中,您将对API进行AJAX调用
    www.videotranslate.com/api/executeOrder
  • 若用户在paypal上取消付款,paypal将把用户重定向到
    www.videotranslate.com/cancel callback
    ,这里您可以显示一个错误 敬酒并要求用户再次付款

  • 基本上,当用户单击pay按钮并获取返回url和取消url时,您要做的是在后端调用
    createOrder
    API(参见下面的nodejs代码) 从前端使用window.location例如:window.location.origin+'/success url',以便在本地服务器上测试时不会出现问题, 阶段和生产。然后当用户重定向到
    https://example.com/success-url
    paymentId
    PayerID
    将通过 payapal,然后从该页面可以在后端调用
    executeOrder

    这里是链接到

    下面是一个示例nodejs代码:

    exports.createOrder = (data, callback) => {
      /* First step when user clicks 'Pay with paypal' on place-order screen */
      var create_payment_json = {
        "intent": "sale",
        "payer": {
          "payment_method": "paypal"
        },
        "redirect_urls": {
          "return_url": data.return_url,
          "cancel_url": data.cancel_url
        },
        "transactions": [{
          "amount": {
            "total": getAmountFromNoOFVideos(),
            "currency": "USD"
          },
          "description": "Video Translation"
        }]
      };
    
      paypal.payment.create(create_payment_json, function (error, payment) {
        if (error) {
          callback(error);
        } else {
          if(payment.payer.payment_method === 'paypal') {
            for(var i=0; i < payment.links.length; i++) {
              var link = payment.links[i];
              if (link.method === 'REDIRECT') {
                redirectUrl = link.href;
              }
            }
          }
          callback(null, redirectUrl, payment.id)
        }
      });
    }
    
    exports.executeOrder = (data, callback) => {
      /* Second and final step in place-order screen */
      let paymentId = data.paymentId;
      let PayerID = data.PayerID;
    
      var details = { "payer_id": PayerID };
      paypal.payment.execute(paymentId, details, function (error, payment) {
        if (error) {
          console.log("\x1b[31m", "PAYPAL ERROR: ", error)
          callback(error);
        } else {
          callback(null, true);
        }
      });
    }
    
    exports.createOrder=(数据,回调)=>{
    /*用户在下订单屏幕上单击“使用paypal支付”时的第一步*/
    var create\u payment\u json={
    “意图”:“出售”,
    “付款人”:{
    “付款方式”:“贝宝”
    },
    “重定向URL”:{
    “return\u url”:data.return\u url,
    “取消url”:data.cancel\u url
    },
    “交易”:[{
    “金额”:{
    “总计”:getAmountFromNoOFVideos(),
    “货币”:“美元”
    },
    “说明”:“视频翻译”
    }]
    };
    paypal.payment.create(创建付款,函数(错误,付款){
    如果(错误){
    回调(错误);
    }否则{
    如果(payment.payer.payment_method==='paypal'){
    对于(变量i=0;i{
    /*第二步和最后一步到位订单屏幕*/
    让paymentId=data.paymentId;
    设PayerID=data.PayerID;
    var详细信息={“付款人\用户id”:PayerID};
    paypal.payment.execute(paymentId、详细信息、函数(错误、付款){
    如果(错误){
    log(“\x1b[31m”,“PAYPAL错误:”,错误)
    回调(错误);
    }否则{
    回调(null,true);
    }
    });
    }
    
    贝宝流量: -假设您的网站链接是
    www.videotranslate.com

  • 用户在您的网站
    www.videotranslate.com
  • 您对API
    www.videotranslate.com/API/createOrder
    从您的角度组件/服务(取决于您的