【问题标题】:Paypal refund api gives error NO API ACCESS TO RECEIVERPaypal 退款 api 给出错误 NO API ACCESS TO RECEIVER
【发布时间】:2013-04-07 12:45:00
【问题描述】:

我正在使用来自自适应支付 api 的预批准和延迟链式支​​付。

我使用 api 的测试业务帐户也是主要接收者帐户。

我在使用 preapproval 启动延迟付款后生成了一个 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;
        }

在上面的代码 sn-p 中返回的 Ack 代码是成功的,但是当我打印 RefundInfo 对象的退款状态时,它显示 NO_API_ACCESS_TO_RECEIVER。 我已经从主账户的 paypal 面板向 api 调用者授予了权限。

我的身边有什么遗漏吗?请帮帮我!

【问题讨论】:

    标签: android paypal paypal-sandbox


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 2019-07-30
        • 2016-06-06
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 2013-03-16
        • 1970-01-01
        相关资源
        最近更新 更多