Skip to content

Latest commit

 

History

History
236 lines (172 loc) · 6.33 KB

README.rst

File metadata and controls

236 lines (172 loc) · 6.33 KB

PoundPay

PoundPay enables developers to build apps which facilitate transactions between two of their users. PoundPay is designed specifically for these types of transactions, as opposed to direct payments from customer to business. In short, PoundPay is the payments platform for marketplaces.

Install

$ easy_install poundpay

Configure

CONFIG = {
    'sandbox': {
        'developer_sid': 'DV0383d447360511e0bbac00264a09ff3c',
        'auth_token': ('c31155b9f944d7aed204bdb2a253fef13b4fdcc6ae15402004'
                       '49cc4526b2381a'),
        'api_url': 'https://api-sandbox.poundpay.com'
    },
    'production': {
        'developer_sid': 'DV8dd93f0f3c6411e0863f00264a09ff3c',
        'auth_token': ('d8c4ea1bafd3fcac8c1062a72c22bcdb09321deb1041df2571'
                       '65cd6449def0de')
    }
}

import poundpay
poundpay.configure(**CONFIG['production'])

Creating a Payment

payment = poundpay.Payment(
    amount=10000,   # in usd cents, not dollars
    payer_fee_amount=0,
    payer_email_address='[email protected]',
    recipient_fee_amount=500,
    recipient_email_address='[email protected]',
    description='Beats by Dr. Dre',
).save()

Payment methods

list_of_payments = poundpay.Payment.all()
payment = poundpay.Payment.find(payment_sid)
payment.escrow()   # AUTHORIZED -> ESCROWED.  Credit card is charged
payment.release()  # ESCROWED   -> RELEASED.  Recipient receives money
payment.cancel()   # ESCROWED   -> CANCELED.  Payer receives refund

Serving the payment IFRAME

<script src="https://www.poundpay.com/js/poundpay.js"></script>

<div id="pound-root"></div>

<script>
  function handlePaymentSuccess() {
    // do something
  }

  function handlePaymentError() {
    // handle error
  }

  PoundPay.init({
    payment_sid: "{{payment.sid}}",
    success: handlePaymentSuccess,
    error: handlePaymentError,
    first_name: "Fred", // Optional
    last_name: "Nietzsche", // Optional
    address_street: "990 Guerrero St", // Optional
    address_city: "San Francisco", // Optional
    address_state: "California", // Optional
    address_zip: "94110", // Optional
    server: "https://www-sandbox.poundpay.com"  // Exclude for production
  });
</script>

Creating a Charge Permission

charge_permission = poundpay.ChargePermission(
    email_address='[email protected]',
).save()

Deactivating a Charge Permission

charge_permission = poundpay.ChargePermission.find(charge_permission_sid)
charge_permission.deactivate()

ChargePermission methods

list_of_payments = poundpay.ChargePermission.all()
charge_permission = poundpay.ChargePermission.find(charge_permission_sid)
charge_permission.deactivate()  # CREATED or ACTIVE -> INACTIVE. Charge permission is deactivated and can no longer be used to authorize payments for the associated payer.

Serving the charge permission IFRAME

<script src="https://www.poundpay.com/js/poundpay.js"></script>

<div id="pound-root"></div>

<script>
  function handleChargePermissionSuccess() {
    // do something
  }

  function handleChargePermissionError() {
    // handle error
  }

  PoundPay.init({
    charge_permission_sid: "{{charge_permission.sid}}",
    success: handleChargePermissionSuccess,
    error: handleChargePermissionError,
    name: "Freddy Nietzsche", // Optional
    address_street: "990 Guerrero St", // Optional
    address_city: "San Francisco", // Optional
    address_state: "California", // Optional
    address_zip: "94110", // Optional
    server: "https://www-sandbox.poundpay.com"  // Exclude for production
  });
</script>

Batching

In some cases you may wish to batch authorize and escrow a collection of payments. By doing so there will be only one payer charge for that collection of payments. Note that if you do batch authorize a collection of payments that it must also be batch escrowed.

Batching is designed for shopping carts where you want a collection of payments to appear to appear as a single charge.

In order to use batching you simply need to pass sids for all payments in the collection you want to batch to the IFrame:

<script src="https://www.poundpay.com/js/poundpay.js"></script>

  <div id="pound-root"></div>

  <script>
    function handlePaymentSuccess() {
      // do something
    }

    function handlePaymentError() {
      // handle error
    }

    PoundPay.init({
      payment_sid: [
          "{{payment1.sid}}"
          "{{payment2.sid}}",
          "{{payment3.sid}}"
          ],
      success: handlePaymentSuccess,
      error: handlePaymentError,
      first_name: "Fred", // Optional
      last_name: "Nietzsche", // Optional
      address_street: "990 Guerrero St", // Optional
      address_city: "San Francisco", // Optional
      address_state: "California", // Optional
      address_zip: "94110", // Optional
      server: "https://www-sandbox.poundpay.com"  // Exclude for production
    });
  </script>

Alternatively if you are directly authorizing the payments using a charge permission:

Payments.batch_update(
    payment1.sid, payment2.sid, payment3.sid,
    status='AUTHORIZED')

Finally you'll need to batch escrow the payments:

Payments.batch_update(
    payment1.sid, payment2.sid, payment3.sid,
    status='ESCROWED')

Notice that if you did the following instead an error would be triggered since batched payments must be authorized and escrowed collectively:

Payments.find(payment1.sid, status='ESCROWED').save()  # fails

However if you cancel some of the payments prior to batch escrow you should exclude them from the batch call:

Payments.find(payment1.sid, status='CANCEL').save()  # ok

Payments.batch_update(
    payment2.sid, payment3.sid,
    status='ESCROWED')

Links