官方midtrans支付api客户端

midtransclient的Python项目详细描述


midtrans客户端-python

Build StatusPyPI versionDownloadsDownloads

MidtransPython!

这是midtrans支付api的官方pythonapi客户端/库。访问https://midtrans.com。有关产品的更多信息,请参阅http://docs.midtrans.com上的文档以了解更多技术细节。

一。安装

1.a使用pip

pip install midtransclient

1.b手动安装

如果不使用pip,则可以克隆或download此存储库。 然后从midtransclient文件夹导入。

或者从repo文件夹运行pip安装。

pip install .

2.用法

2.1选择产品/方法

我们有2 different products付款,您可以使用:

  • Snap-可自定义的付款弹出窗口将出现在your web/app上(无重定向)。doc ref
  • Snap Redirect-客户需要重定向到midtrans托管的付款urldoc ref
  • Core API (VT-Direct)-基本的后端实现,您可以根据自己的喜好自定义嵌入在web/app上的前端(无重定向)。doc ref

选择一个你认为最适合你独特需求的。

2.2客户端初始化和配置

Midtrans Dashboard获取客户端密钥和服务器密钥

创建API客户端对象

# Create Core API instancecore_api=midtransclient.CoreApi(is_production=False,server_key='YOUR_SERVER_KEY',client_key='YOUR_CLIENT_KEY')
# Create Snap API instancesnap=midtransclient.Snap(is_production=False,server_key='YOUR_SERVER_KEY',client_key='YOUR_CLIENT_KEY')

也可以使用Snap.api_config.set( ... )重新设置配置 示例:

# initialize object, empty configsnap=midtransclient.Snap()# re-set full configsnap.api_config.set(is_production=False,server_key='YOUR_SERVER_KEY',client_key='YOUR_CLIENT_KEY')# re-set server_key onlysnap.api_config.set(server_key='YOUR_SERVER_KEY')# re-set is_production onlysnap.api_config.set(is_production=True)

您还可以直接从属性设置配置

# initialize object, empty configsnap=midtransclient.Snap()# set configsnap.api_config.is_production=Falsesnap.api_config.server_key='YOUR_SERVER_KEY'snap.api_config.client='YOUR_CLIENT_KEY'

2.2.a快照

您可以看到快照示例here

Snap类的可用方法

# return Snap API /transaction response as Dictionarydefcreate_transactions(parameter):# return Snap API /transaction token as Stringdefcreate_transactions_token(parameter):# return Snap API /transaction redirect_url as Stringdefcreate_transactions_redirect_url(parameter):

parameterSNAP Parameter的字典或json字符串

获取快照标记

# Create Snap API instancesnap=midtransclient.Snap(is_production=False,server_key='YOUR_SERVER_KEY',client_key='YOUR_CLIENT_KEY')# Build API parameterparam={"transaction_details":{"order_id":"test-transaction-123","gross_amount":200000},"credit_card":{"secure":True}}transaction=snap.create_transaction(param)transaction_token=transaction['token']# alternative way to create transaction_token:# transaction_token = snap.create_transaction_token(param)

当客户单击“付款”按钮时初始化Snap JS

用上面获得的transaction_token替换PUT_TRANSACTION_TOKEN_HERE

<html><body><buttonid="pay-button">Pay!</button><pre><divid="result-json">JSON result will appear here after payment:<br></div></pre><!-- TODO: Remove ".sandbox" from script src URL for production environment. Also input your client key in "data-client-key" --><scriptsrc="https://app.sandbox.midtrans.com/snap/snap.js"data-client-key="<Set your ClientKey here>"></script><scripttype="text/javascript">document.getElementById('pay-button').onclick=function(){// SnapToken acquired from previous stepsnap.pay('PUT_TRANSACTION_TOKEN_HERE',{// OptionalonSuccess:function(result){/* You may add your own js here, this is just example */document.getElementById('result-json').innerHTML+=JSON.stringify(result,null,2);},// OptionalonPending:function(result){/* You may add your own js here, this is just example */document.getElementById('result-json').innerHTML+=JSON.stringify(result,null,2);},// OptionalonError:function(result){/* You may add your own js here, this is just example */document.getElementById('result-json').innerHTML+=JSON.stringify(result,null,2);}});};</script></body></html>

实现通知处理程序

Refer to this section

2.2.b快照重定向

也可用作示例here

获取付款页的重定向URL

# Create Snap API instancesnap=midtransclient.Snap(is_production=False,server_key='YOUR_SERVER_KEY',client_key='YOUR_CLIENT_KEY')# Build API parameterparam={"transaction_details":{"order_id":"test-transaction-123","gross_amount":200000},"credit_card":{"secure":True}}transaction=snap.create_transaction(param)transaction_redirect_url=transaction['redirect_url']# alternative way to create redirect_url:# transaction_redirect_url = snap.create_redirect_url(param)

实现通知处理程序

Refer to this section

2.2.c核心api(vt direct)

您可以看到一些核心api示例here

CoreApi类的可用方法

defcharge(self,parameters=dict()):"""    Trigger `/charge` API call to Core API    :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON    (more params detail refer to: https://api-docs.midtrans.com)    :return: Dictionary from JSON decoded response    """defcapture(self,parameters=dict()):"""    Trigger `/capture` API call to Core API    Capture is only used for pre-authorize transaction only    :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON    (more params detail refer to: https://api-docs.midtrans.com)    :return: Dictionary from JSON decoded response    """defcard_register(self,parameters=dict()):"""    Trigger `/card/register` API call to Core API    :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON    (more params detail refer to: https://api-docs.midtrans.com)    :return: Dictionary from JSON decoded response    """defcard_token(self,parameters=dict()):"""    Trigger `/token` API call to Core API    :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON    (more params detail refer to: https://api-docs.midtrans.com)    :return: Dictionary from JSON decoded response    """defcard_point_inquiry(self,token_id):"""    Trigger `/point_inquiry/<token-id>` API call to Core API    :param parameters: dictionary of Core API JSON body as parameter, will be converted to JSON    (more params detail refer to: https://api-docs.midtrans.com)    :return: Dictionary from JSON decoded response    """

parameterCore API Parameter的字典或json字符串

信用卡获得代币

应在前端处理get令牌请参阅API docs

信用卡费用
# Create Core API instancecore_api=midtransclient.Snap(is_production=False,server_key='YOUR_SERVER_KEY',client_key='YOUR_CLIENT_KEY')# Build API parameterparam={"payment_type":"credit_card","transaction_details":{"gross_amount":12145,"order_id":"test-transaction-54321",},"credit_card":{"token_id":'CREDIT_CARD_TOKEN',# change with your card token"authentication":True}}# charge transactioncharge_response=core_api.charge(param)print('charge_response:')print(charge_response)

信用卡3DS身份验证

信用卡收费结果可能包含用于3DS身份验证的redirect_url。3DS身份验证应在前端处理请参考API docs

有关信用卡3DS交易的完整示例,请参阅:

2.3处理http通知

IMPORTANT NOTE: To update transaction status on your backend/database, DO NOT solely rely on frontend callbacks! For security reason to make sure the status is authentically coming from Midtrans, only update transaction status based on HTTP Notification or API Get Status.

创建单独的web端点(通知url)以接收http post通知回调/webhook。 当事务状态更改时,将发送http通知。 示例也可用here

# Create Core API / Snap instance (both have shared `transactions` methods)api_client=midtransclient.CoreApi(is_production=False,server_key='YOUR_SERVER_KEY',client_key='YOUR_CLIENT_KEY')status_response=api_client.transactions.notification(mock_notification)order_id=status_response['order_id']transaction_status=status_response['transaction_status']fraud_status=status_response['fraud_status']print('Transaction notification received. Order ID: {0}. Transaction status: {1}. Fraud status: {3}'.format(order_id,transaction_status,fraud_status))# Sample transaction_status handling logiciftransaction_status=='capture':iffraud_status=='challenge':# TODO set transaction status on your databaase to 'challenge'elseiffraud_status=='accept':# TODO set transaction status on your databaase to 'success'elseiftransaction_status=='cancel'ortransaction_status=='deny'ortransaction_status=='expire':# TODO set transaction status on your databaase to 'failure'elseiftransaction_status=='pending':# TODO set transaction status on your databaase to 'pending' / waiting payment

2.4交易行为

也可作为示例here

获取状态

# get status of transaction that already recorded on midtrans (already `charge`-ed) status_response=api_client.transactions.status('YOUR_ORDER_ID OR TRANSACTION_ID')

获取状态B2B
# get transaction status of VA b2b transactionstatusb2b_response=api_client.transactions.statusb2b('YOUR_ORDER_ID OR TRANSACTION_ID')

批准交易

# approve a credit card transaction with `challenge` fraud statusapprove_response=api_client.transactions.approve('YOUR_ORDER_ID OR TRANSACTION_ID')

拒绝交易
# deny a credit card transaction with `challenge` fraud statusdeny_response=api_client.transactions.deny('YOUR_ORDER_ID OR TRANSACTION_ID')

取消交易
# cancel a credit card transaction or pending transactioncancel_response=api_client.transactions.cancel('YOUR_ORDER_ID OR TRANSACTION_ID')

终止交易

# expire a pending transactionexpire_response=api_client.transactions.expire('YOUR_ORDER_ID OR TRANSACTION_ID')

退款交易
# refund a transaction (not all payment channel allow refund via API)param={"amount":5000,"reason":"Item out of stock"}refund_response=api_client.transactions.refund('YOUR_ORDER_ID OR TRANSACTION_ID',param)

三。示例

示例可在/examples文件夹中找到。 有:

获取帮助

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从数组中打印int值?   prepared语句Java中奇怪的异常PreparedStatement:参数索引超出范围   封装如何在OOP Java中为主方法编码?   java某些手机显示快捷方式徽章需要什么权限?   java TextView不会随OnItemSelectedListener更改   java注释处理器不会自动触发吗?   java Spring JPA如何计算外键数   c#对于这个简单的OOAD问题,哪种设计最优雅?   java如何处理while循环中的异常?   Android Studio错误:进程'command'/home/draven/Downloads/安卓studio/jre/bin/java''结束,退出值为非零2   在使用Payara服务器的Vaadin应用程序中导航到根目录时,java将丢失上下文根目录   使用contentType application/json而不是application/jsonpatch+json的java修补程序   带有tomcat的java HAproxy连接不足   Java:在应用过滤器后创建一个简单的通用方法进行计数   java如何使用多态性创建一个实例化对象的方法,然后用它们高效地填充ArrayList?