Мы используем PayPal sdk (Runtime Version- 2.0.50727)
Для реализации концепции App Fee, после завершения транзакции между покупателем и продавцом (т.е. сумма зачисляется Merchant), мы пытаемся вычесть App Appee из подключенногоСчет продавца и перевод на счет Платформы.При этом мы получаем код состояния - PayPalPaymentStatusCode.CREATED вместо PayPalPaymentStatusCode.COMPLETED.Пожалуйста, обратитесь приложенные снимки экрана.
Кроме того, мы не видим транзакции платы за платформу в нашей консоли учетной записи платформы, а также в подключенной консоли учетной записи.
Кроме того, где мы можем проверить журналы API и сами увидеть ошибки, еслилюбой?(как полоса и мы платим).Хорошо иметь экран в учетной записи Merchant или Platform.
У нас есть интеграция PayPal в наше веб-приложение.
public bool PreApprovalPayment (decimal appFee) {string receiverEmail = ConfigurationManager.AppSettings ["Paypal.Receiver.EmailId"]. ToString ();
//PAY – Use this option if you are not using the Pay request in combination with ExecutePayment.
//CREATE – Use this option to set up the payment instructions with SetPaymentOptions
//and then execute the payment at a later time with the ExecutePayment.
//PAY_PRIMARY – For chained payments only, specify this value to delay payments to the secondary receivers;
//only the payment to the primary receiver is processed.
string actionType = "PAY";
string fundingType = "BALANCE";//ECHECK,BALANSE,CREDITCARD
string returnUrl = this.ReturnUrl;
//cancel url to redirect to Payment integration app for Set Express check out Payment
string cancelUrl = this.ReturnUrl;
ReceiverList receiverList = new ReceiverList();
receiverList.receiver = new List<Receiver>();
Receiver rec = new Receiver(appFee);
rec.email = receiverEmail;
receiverList.receiver.Add(rec);
PayRequest request = new PayRequest(new RequestEnvelope("en_US"), actionType,
cancelUrl, this.CurrencyCode,
receiverList, returnUrl);
if (!string.IsNullOrWhiteSpace(this.PreApprovalKey))
{
request.preapprovalKey = this.PreApprovalKey;
}
if (!string.IsNullOrWhiteSpace(this.SenderEmail))
request.senderEmail = this.SenderEmail;
if (!string.IsNullOrWhiteSpace(fundingType))
{
request.fundingConstraint = new FundingConstraint();
request.fundingConstraint.allowedFundingType = new FundingTypeList();
request.fundingConstraint.allowedFundingType.fundingTypeInfo.Add(
new FundingTypeInfo(fundingType));
}
AdaptivePaymentsService service = null;
PayResponse response = null;
try
{
// Configuration map containing signature credentials and other required configuration.
Dictionary<string, string> configurationMap = PayPalConfiguration.GetAcctAndConfig();
// Creating service wrapper object to make an API call and loading
// configuration map for your credentials and endpoint
service = new AdaptivePaymentsService(configurationMap);
if (service != null)
{
response = service.Pay(request);
if (response != null && !(response.responseEnvelope.ack == AckCode.FAILURE) &&
!(response.responseEnvelope.ack == AckCode.FAILUREWITHWARNING))
{
if (!string.IsNullOrEmpty(response.payKey) && response.paymentExecStatus.Equals(PayPalPaymentStatusCode.COMPLETED.ToString()))
{
return true;
}
}
}
}
catch (Exception e)
{
return false;
}
return false;
}
Нам нужно вычесть плату за приложениеиз транзакции клиента, которая поступает на счет владельца платформы, а оставшаяся сумма должна поступить организатору магазина.