c# – PayPal Rest API – 使用更新的交易信息执行付款
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – PayPal Rest API – 使用更新的交易信息执行付款,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6736字,纯文字阅读大概需要10分钟。
内容图文
我正在使用C#和PayPal Rest API来获得批准的付款并执行它.但是,我需要更新与已批准付款相关的交易. PayPal文档如下:
Use this call to execute (complete) a PayPal payment that has been
approved by the payer. You can optionally update transaction
information when executing the payment by passing in one or more
transactions.
这是我的代码
//Update the payment details in case totals changed because of a new address/zipcode
Details amountDetails = new Details();
amountDetails.subtotal = ValidationHelper.GetString(prices[Order.CartPricesEnum.Subtotal], "0");
amountDetails.tax = ValidationHelper.GetString(prices[Order.CartPricesEnum.Tax], "0");
amountDetails.shipping = ValidationHelper.GetString(prices[Order.CartPricesEnum.Shipping], "0");
Amount amount = new Amount();
amount.total = ValidationHelper.GetString(prices[Order.CartPricesEnum.Total], "0");
amount.currency = "USD";
amount.details = amountDetails;
//update the transaction to make sure we have accounted for any updated prices
Transactions trn = new Transactions();
trn.amount = amount;
List<Transactions> trns = new List<Transactions>();
trns.Add(trn);
//Create a payment execution object
PaymentExecution paymentExecution = new PaymentExecution();
paymentExecution.payer_id = payPalPayerID;
paymentExecution.transactions = trns;
//Execute (complete) the payment
Payment newPayment = payment.Execute(accessToken, paymentExecution);
问题是,当它运行时,我得到以下错误:
{"name":"VALIDATION_ERROR","details":[{"field":"transactions[0].total","issue":"Required field missing"},{"field":"transactions[0].currency","issue":"Required field missing"},{"field":"transactions[0].amount","issue":"This field name is not defined for this resource type"}],"message":"Invalid request - see details","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR","debug_id":"bcba38f3c56d7"}
这告诉我,我缺少.total和.currency,并且没有定义.amount字段.但是,您可以清楚地看到我正在设置总计和货币,并且金额字段是您可以根据PayPal API文档在事务对象上设置的唯一字段:
transactions
array of transaction objects
Transactional details if updating a payment. Note that this instance of the transactions object accepts only the amount object.
所以,我的问题是:我如何获得批准的付款,更新付款交易的价格,然后执行该付款?
解决方法:
我不是这方面的专家,但我刚刚实施了类似的支付交易,我认为必须分两步完成:创建付款然后执行付款,因为买方必须登录他的PayPal帐户并确认付款之间.这样它对我有用.
所以你需要的是这样的(抱歉我的代码是VB.NET):
'Create payment
Dim createdPayment As Payment = payment.Create(apiContext)
然后从PayPal返回回复,您可以执行付款:
'Execute payment
Dim paymentExecution As New PaymentExecution()
Dim executedPayment As Payment = payment.Execute(apiContext, paymentExecution)
以下是API提供的示例中的完整示例:
// #Create Payment Using PayPal Sample
// This sample code demonstrates how you can process a
// PayPal Account based Payment.
// API used: /v1/payments/payment
using System;
using System.Web;
using PayPal;
using PayPal.Api.Payments;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Collections.Generic;
namespace RestApiSample
{
public partial class PaymentWithPayPal : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
HttpContext CurrContext = HttpContext.Current;
Payment pymnt = null;
// ### Api Context
// Pass in a `APIContext` object to authenticate
// the call and to send a unique request id
// (that ensures idempotency). The SDK generates
// a request id if you do not pass one explicitly.
// See [Configuration.cs](/Source/Configuration.html) to know more about APIContext..
APIContext apiContext = Configuration.GetAPIContext();
// ## ExecutePayment
if (Request.Params["PayerID"] != null)
{
pymnt = new Payment();
if (Request.Params["guid"] != null)
{
pymnt.id = (string)Session[Request.Params["guid"]];
}
try
{
PaymentExecution pymntExecution = new PaymentExecution();
pymntExecution.payer_id = Request.Params["PayerID"];
Payment executedPayment = pymnt.Execute(apiContext, pymntExecution);
CurrContext.Items.Add("ResponseJson", JObject.Parse(executedPayment.ConvertToJson()).ToString(Formatting.Indented));
}
catch (PayPal.Exception.PayPalException ex)
{
CurrContext.Items.Add("Error", ex.Message);
}
}
// ## Creating Payment
else
{
// ###Items
// Items within a transaction.
Item item = new Item();
item.name = "Item Name";
item.currency = "USD";
item.price = "15";
item.quantity = "5";
item.sku = "sku";
List<Item> itms = new List<Item>();
itms.Add(item);
ItemList itemList = new ItemList();
itemList.items = itms;
// ###Payer
// A resource representing a Payer that funds a payment
// Payment Method
// as `paypal`
Payer payr = new Payer();
payr.payment_method = "paypal";
Random rndm = new Random();
var guid = Convert.ToString(rndm.Next(100000));
string baseURI = Request.Url.Scheme + "://" + Request.Url.Authority + "/PaymentWithPayPal.aspx?";
// # Redirect URLS
RedirectUrls redirUrls = new RedirectUrls();
redirUrls.cancel_url = baseURI + "guid=" + guid;
redirUrls.return_url = baseURI + "guid=" + guid;
// ###Details
// Let's you specify details of a payment amount.
Details details = new Details();
details.tax = "15";
details.shipping = "10";
details.subtotal = "75";
// ###Amount
// Let's you specify a payment amount.
Amount amnt = new Amount();
amnt.currency = "USD";
// Total must be equal to sum of shipping, tax and subtotal.
amnt.total = "100";
amnt.details = details;
// ###Transaction
// A transaction defines the contract of a
// payment - what is the payment for and who
// is fulfilling it.
List<Transaction> transactionList = new List<Transaction>();
Transaction tran = new Transaction();
tran.description = "Transaction description.";
tran.amount = amnt;
tran.item_list = itemList;
// The Payment creation API requires a list of
// Transaction; add the created `Transaction`
// to a List
transactionList.Add(tran);
// ###Payment
// A Payment Resource; create one using
// the above types and intent as `sale` or `authorize`
pymnt = new Payment();
pymnt.intent = "sale";
pymnt.payer = payr;
pymnt.transactions = transactionList;
pymnt.redirect_urls = redirUrls;
try
{
// Create a payment using a valid APIContext
Payment createdPayment = pymnt.Create(apiContext);
CurrContext.Items.Add("ResponseJson", JObject.Parse(createdPayment.ConvertToJson()).ToString(Formatting.Indented));
var links = createdPayment.links.GetEnumerator();
while (links.MoveNext())
{
Links lnk = links.Current;
if (lnk.rel.ToLower().Trim().Equals("approval_url"))
{
CurrContext.Items.Add("RedirectURL", lnk.href);
}
}
Session.Add(guid, createdPayment.id);
}
catch (PayPal.Exception.PayPalException ex)
{
CurrContext.Items.Add("Error", ex.Message);
}
}
CurrContext.Items.Add("RequestJson", JObject.Parse(pymnt.ConvertToJson()).ToString(Formatting.Indented));
Server.Transfer("~/Response.aspx");
}
}
}
内容总结
以上是互联网集市为您收集整理的c# – PayPal Rest API – 使用更新的交易信息执行付款全部内容,希望文章能够帮你解决c# – PayPal Rest API – 使用更新的交易信息执行付款所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。