2

アダプティブ ペイメント 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 と表示されます。プライマリ アカウントのペイパル パネルから API 呼び出し元に許可を与えました。

私の側に欠けているものはありますか?私を助けてください!

4

2 に答える 2

1

自分で答えを得ました。皆さんと共有

Paypal SDK クライアント プロパティ ファイルを間違った場所から読み取っていました。

このような問題を回避するには、AdaptivePayments のコンストラクターでプロパティを設定する必要があります。

以下は、さらに説明するためのコードです。

プロパティ ファイルからすべてのペイパル プロパティを読み取る関数 getPayPalProperties() を持つセッション Bean PropertyBean があります。

Properties properties = propertyBeanLocal.getPayPalProperties();

AdaptivePayments adaptivePayments = new AdaptivePayments(properties);

そして、これを行う代わりに

refundRequest.setRequestEnvelope(ClientInfoUtil.getMyAppRequestEnvelope());

これを行う。

RequestEnvelope requestEnvelope = new RequestEnvelope();
requestEnvelope.setErrorLanguage("en_us");
refundRequest.setRequestEnvelope(requestEnvelope);
于 2013-05-23T07:06:08.100 に答える