2

Ruby on Rails アプリがあります。あるユーザーが別のユーザーに支払うことができるようにしたい場合は、アプリへの 10% の「コミッション」を差し引いてください。私のクライアントは、アプリが保持する 10% から手数料を引き出すことを望んでいます。これには 2 つの理由があります。1) ニッケルを使わない/顧客を薄暗くする 2) 一定量のトランザクション (月あたり) の後、パーセンテージが明らかに低くなります。

たとえば、ユーザー 1 がユーザー 2 に 100 ドルを支払った場合、次のように表示されるようにします。

ユーザー 1 がアプリに 100 ドルを送金 -> アプリが 97.09 ドル (手数料を差し引いた 100 ドル) を受け取る -> アプリがユーザー 2 に 90.00 (90%) を送信 -> ユーザー 2 が 90 ドルを全額受け取る (手数料なし)

ただし、アプリをプライマリ レシーバーとして設定しているにもかかわらず、セカンダリ レシーバーに料金が表示され、ユーザー 2 が料金を支払うことになります。また、ユーザー 2 をプライマリとして設定し、その後アプリに 10% のみを転送しようとしましたが、料金はプライマリ受信者に移動されました。コードで変更したのは、請求されるパーセンテージと、プライマリ/セカンダリ メールだけです。私のコードは次のようになります。

<!-- app/lib/pay_pal_api.rb -->
require "pp-adaptive"

class PayPalAPI

def self.payment_url(submission)
  amount = submission.amount_in_cents.to_f / 100.0
  recipient_cut = amount * 0.9
  recipient_email = submission.submitter.paypal_email

  client.execute(:Pay,
    :action_type     => "PAY",
    :currency_code   => "USD",
    :cancel_url      => "http://localhost:3000/my-studio",
    :return_url      => "http://localhost:3000/submissions/#{submission.id}",
    :receivers       => [
      { :email => recipient_email, :amount => recipient_cut, :primary => false },
      { :email => "TestApp@gmail.com", :amount => amount, :primary => true }
    ]
  ) do |response|

    if response.success?
      puts "Pay key: #{response.pay_key}"

      # send the user to PayPal to make the payment
      # e.g. https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=abc
      return client.payment_url(response)
    else
      puts "#{response.ack_code}: #{response.error_message}"
    end

  end
  return nil
end
4

2 に答える 2

2

I figured out that in the pp-adaptive gem, it requires this syntax:

:fees_payer       => "PRIMARYRECEIVER",

Now it is working perfectly.

于 2014-05-17T07:12:51.223 に答える
1

feesPayerフィールドを使用して、誰が最初に支払いを受け取るかに応じて、PRIMARYRECEIVERまたはに設定します。SECONDARYONLYこれの ruby​​ SDK バージョンはfees_payer-- API リファレンスから:

feesPayer   xs:string (Optional) The payer of PayPal fees. Allowable values are: 
        SENDER – Sender pays all fees (for personal, implicit simple/parallel payments; do not use for chained or unilateral payments)
        PRIMARYRECEIVER – Primary receiver pays all fees (chained payments only)
        EACHRECEIVER – Each receiver pays their own fee (default, personal and unilateral payments)
        SECONDARYONLY – Secondary receivers pay all fees (use only for chained payments with one secondary receiver)

例えば:

client.execute(:Pay,
    :action_type     => "PAY",
    :currency_code   => "USD",
    :cancel_url      => "http://localhost:3000/my-studio",
    :return_url      => "http://localhost:3000/submissions/#{submission.id}",
    :fees_payer      => "SECONDARYONLY",
    :receivers       => [
      { :email => recipient_email, :amount => recipient_cut, :primary => false },
      { :email => "TestApp@gmail.com", :amount => amount, :primary => true }
    ]
  )
于 2014-05-14T20:15:24.300 に答える