Skip to main content

Plural P3P Seller SDK — x402 Plural P3P server middleware (Python)

Project description

Pine Labs Online P3P Seller SDK (Python)

Python SDK for Pine Labs Online P3P seller integrations. It mirrors @pine-labs-online/p3p-seller-sdk, creates mandates, generates HTTP 402 payment challenges, verifies buyer credentials, captures payments through P3P, and builds Payment-Receipt headers.

Installation

pip install pinelabs-p3p-seller-sdk[flask]
pip install pinelabs-p3p-seller-sdk[fastapi]

Import module: pinelabs_p3p_seller. Requires Python 3.9 or newer.

Config

from pinelabs_p3p_seller import (
    P3PEnvironment,
    PaymentGateway,
    PaymentMethod,
    PluralSellerConfig,
)

config = PluralSellerConfig(
    clientId="...",
    clientSecret="...",
    challengeSecretKey="...",
    env=P3PEnvironment.SANDBOX,
    paymentGateway=PaymentGateway.PineLabsOnline,
    availablePaymentMethods=[PaymentMethod.UpiSbmd, PaymentMethod.Crypto],
)

clientId and clientSecret are used internally for POST /api/auth/v1/token. The SDK caches and refreshes bearer tokens before expiry. env selects the Pine Labs host used for auth and /mpp/v1/* service calls.

Mandates

from pinelabs_p3p_seller import Amount, CreateMandateOptions, PluralP3P

p3p = PluralP3P.create(config)
mandate = p3p.create_mandate(CreateMandateOptions(
    mobileNumber="9876543210",
    customerReference="9876543210",
    amount=Amount(value=100000, currency="INR"),
    paymentMethod=PaymentMethod.UpiSbmd,
    validityInDays=20,
))

This maps to POST /mpp/v1/pre-authorize and sends customer.mobile_number.

Paid Resource Flow

from flask import Flask, jsonify
from pinelabs_p3p_seller import Amount, ChargeOptions
from pinelabs_p3p_seller.flask_mw import payment_required

app = Flask(__name__)

@app.get("/api/premium")
@payment_required(config, ChargeOptions(
    amount=Amount(value=50000, currency="INR"),
    resource="/api/premium",
))
def premium():
    return jsonify({"data": "premium content"})

The middleware reads P3P-Credential: Payment <payload>, not Authorization, so it does not conflict with application bearer auth.

Capture

from pinelabs_p3p_seller import CaptureOptions

result = p3p.capture(CaptureOptions(
    token="MPP_TOK_123",
    amount=Amount(value=50000, currency="INR"),
    paymentMethod=PaymentMethod.UpiSbmd,
    customerReference="9876543210",
    mobileNumber="9876543210",
    challengeId="ch_123",
    merchantOrderReference="order-123",
))

The debit body uses customer.mobile_number, payment_amount, payment_token, and challenge_id. The SDK sends Idempotency-Key and Request-Hash headers and does not send Merchant-ID.

Generic Middleware Helper

from pinelabs_p3p_seller.server.middleware import decide_payment

decision = decide_payment(
    credential_header=request.headers.get("P3P-Credential"),
    config=config,
    charge_options=ChargeOptions(
        amount=Amount(value=50000, currency="INR"),
        resource="/api/premium-data",
    ),
)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pinelabs_online_mpp_server_sdk-0.1.2.tar.gz (25.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pinelabs_online_mpp_server_sdk-0.1.2-py3-none-any.whl (32.2 kB view details)

Uploaded Python 3

File details

Details for the file pinelabs_online_mpp_server_sdk-0.1.2.tar.gz.

File metadata

File hashes

Hashes for pinelabs_online_mpp_server_sdk-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a9473b229ea830f4e5fb20286c213a9f37ee6d88abaf56e4b6bc866cab3d4e37
MD5 eb51e425abac625df82d9b89858b22ec
BLAKE2b-256 cbdbfc43be31b05e5a510d60168b1a9f66b27944440e81fa476cb65e867f245d

See more details on using hashes here.

File details

Details for the file pinelabs_online_mpp_server_sdk-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pinelabs_online_mpp_server_sdk-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8af502bff9f1d5bc8207ddfbc0a57ca47486b0ea092f3ffa6795dc6dd746760a
MD5 cae7f89d1e7cc22ff41ec7ec576b8a3b
BLAKE2b-256 b2d04d4b42044882be87c4e716ddb53728e8bb50372e35fb9ba659e1e2d0d634

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page