首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Paypal退款api向接收方提供错误无API访问权限

Paypal退款api向接收方提供错误无API访问权限
EN

Stack Overflow用户
提问于 2013-04-15 19:57:01
回答 2查看 807关注 0票数 2

我正在使用自适应支付api的预审批和延迟连锁支付。

我使用api的测试业务账号也是主接收方账号。

使用预审批启动延迟付款后,我会得到一个生成的paykey。钱在主接收器中被准确地接收到。我的应用程序现在有一个场景,钱必须从主接收者退还给购买者。当使用paykey并指定接收方并设置主接收方标志来执行此退款时,我收到一个错误NO_API_ACCESS_TO_RECEIVER。

这阻碍了我的应用程序发布,这是一个严重的麻烦。你能不能早点给我解锁。

这是我的代码:

代码语言:javascript
复制
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代码是success,但是当我打印RefundInfo对象的退款状态时,它显示为NO_API_ACCESS_TO_RECEIVER。我已经从主账号的paypal面板向api调用者授予了权限。

是不是我这边少了点什么?请帮帮我!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-23 15:06:08

我自己找到了答案。与大家分享

它从错误的位置读取paypal SDK客户端属性文件。

为了避免此类问题,我们应该在AdaptivePayments的构造函数中设置属性。

下面是更多说明的代码:

有一个具有getPayPalProperties()函数的会话bean PropertyBean,该函数从属性文件中读取所有贝宝属性。

代码语言:javascript
复制
Properties properties = propertyBeanLocal.getPayPalProperties();

AdaptivePayments adaptivePayments = new AdaptivePayments(properties);

而不是这样做

代码语言:javascript
复制
refundRequest.setRequestEnvelope(ClientInfoUtil.getMyAppRequestEnvelope());

这样做。

代码语言:javascript
复制
RequestEnvelope requestEnvelope = new RequestEnvelope();
requestEnvelope.setErrorLanguage("en_us");
refundRequest.setRequestEnvelope(requestEnvelope);
票数 1
EN

Stack Overflow用户

发布于 2013-04-24 22:48:42

如果您只是将退款从主要(您自己)退还给发件人,并且您想进行全额退款,那么您不需要指定任何收件人。否则,我将需要某种类型的PayKey或相关ID来查找我这边的请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16014567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档