我正在使用预先批准和自适应付款API延迟链接付款。
我使用api的测试业务帐户也是主要的接收方帐户。
我使用预先批准后生成付款密钥以启动延迟付款。在主接收器中准确地接收钱。我的申请现在有一个场景,钱必须从主要接收者退还给购买者。当使用paykey执行此退款并指定接收器并设置主接收器标志时,我收到错误NO_API_ACCESS_TO_RECEIVER。
这阻止了我的应用发布,这是一个严重的问题。你能不能最早解锁我。
这是我的代码:
RefundRequest refundRequest = new RefundRequest();
refundRequest.setPayKey(payKey);
refundRequest.setCurrencyCode(KeyConstants.CURRENCY_USD_CODE);
refundRequest.setRequestEnvelope(ClientInfoUtil.getMyAppRequestEnvelope());
ReceiverList receiverList = new ReceiverList();
Receiver receiver = new Receiver();
receiver.setEmail(businessAccountPaypalEmail);
receiver.setPrimary(true);
double truncatedAmount = NumberUtil.getDoubleTruncate(amount, KeyConstants.TWO_DECIMAL_FORMAT);
BigDecimal trunBigDecimal = new BigDecimal(truncatedAmount);
receiver.setAmount(trunBigDecimal.setScale(2, RoundingMode.HALF_UP));
receiverList.getReceiver().add(receiver);
refundRequest.setReceiverList(receiverList);
try {
AdaptivePayments adaptivePayments = new AdaptivePayments();
RefundResponse refundResponse = adaptivePayments.refund(refundRequest);
ResponseEnvelope responseEnvelope = refundResponse.getResponseEnvelope();
AckCode ackCode = responseEnvelope.getAck();
if(ackCode == AckCode.SUCCESS || ackCode == AckCode.SUCCESS_WITH_WARNING){
Logger.getLogger(PayPalSessionBean.class.getName()).log(Level.INFO, "Refund success for the pay key {0} and messsage {1}",
new Object[]{payKey});
System.out.println("Ack code is " + ackCode);
RefundInfoList refundInfoList = refundResponse.getRefundInfoList();
List<RefundInfo> refundInfos = refundInfoList.getRefundInfo();
for (Iterator iterator = refundInfos.iterator(); iterator
.hasNext();) {
RefundInfo refundInfo = (RefundInfo) iterator.next();
System.out.println(refundInfo.getReceiver().getEmail() + "\t" + refundInfo.getRefundTransactionStatus() + "\t" +
refundInfo.getRefundGrossAmount() + '\t' + refundInfo.getRefundStatus() + '\t');
ErrorList errorList = refundInfo.getErrorList();
List<ErrorData> errs = errorList.getError();
for (Iterator iterator2 = errs.iterator(); iterator2
.hasNext();) {
ErrorData errorData = (ErrorData) iterator2.next();
System.out.println(errorData.getMessage());
}
}
return true;
}
在上面的代码片段中,返回的ACk代码是成功的,但是当我打印RefundInfo对象的退款状态时,它会显示NO_API_ACCESS_TO_RECEIVER。 我已经从主帐户的paypal小组给了api来电者许可。
我身边有什么遗漏吗?请帮帮我!
答案 0 :(得分:1)
如果您刚刚从小学(自己)退回给发件人,并且您想要全额退款,那么您不需要指定任何接收者。否则我需要某种类型的PayKey或相关ID来查找我这方面的请求。
答案 1 :(得分:1)
我自己得到了答案。与大家分享
它正在从错误的位置读取paypal SDK客户端属性文件。
为避免此类问题,我们应在AdaptivePayments的构造函数中设置属性。
以下是更多插图的代码:
有一个会话bean PropertyBean,其函数getPayPalProperties()从属性文件中读取所有paypal属性。
Properties properties = propertyBeanLocal.getPayPalProperties();
AdaptivePayments adaptivePayments = new AdaptivePayments(properties);
而不是这样做
refundRequest.setRequestEnvelope(ClientInfoUtil.getMyAppRequestEnvelope());
这样做。
RequestEnvelope requestEnvelope = new RequestEnvelope();
requestEnvelope.setErrorLanguage("en_us");
refundRequest.setRequestEnvelope(requestEnvelope);