You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过终端运行Python脚本处理PayNow支付?相关技术疑问

关于Python实现PayNow单条支付的疑问与解答

PayNow是新加坡的一项服务,无需知晓收款人账号,即可通过手机号或新加坡身份证号(NRIC)收发款项。

以下是你参考PayPal并结合星展银行(DBS)开发者文档修改后,设想的通过Python脚本实现PayNow支付(通过收款人注册手机号转账)的代码:

import paynow
paynowrestsdk.configure({
    "mode": "sandbox", # sandbox or live
    "client_id": "EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM",
    "client_secret": "EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM"
})
payment = paynowrestsdk.Payment({
    "fundTransferDetl":{
        "partyId":"11845277752388953651",
        "debitAccountId":"21841900319944140151001",
        "payeeReference":{
            "referenceType":"MSISDN",
            "referenceDesc":"Mobile no.",
            "reference":"65998899758"
        },
        "amount":5,
        "transferCurrency":"SGD",
        "comments":"Transfer",
        "purpose":"Transfer",
        "referenceId":"4P3EDAB1C853A004117A330"
    }
})
if payment.create():
    print(referenceId)
    print(status)
else:
    print(payment.error)

你目前聚焦于单条支付的脚本实现,提出了以下疑问,我来逐一解答:

1. 上述提供的Python脚本是否正确?

这个脚本存在几个明显的问题:

  • 导入的库是paynow,但初始化用的是paynowrestsdk,这会直接触发NameError,因为未导入对应的模块;
  • 支付创建成功后的打印语句中,referenceId和status都是未定义的变量,你需要从创建后的payment对象里读取API返回的对应属性,比如payment.referenceId(具体字段名需对照DBS API文档);
  • 请求体的fundTransferDetl结构可能和DBS官方API要求不匹配,比如部分字段的命名、必填项规则,建议严格参照DBS开发者文档里的参数格式调整。

2. 是否有可导入的相关Python库及对应的文档?

目前没有官方的DBS PayNow Python SDK,你提到的paynow库大概率是非官方或针对其他PayNow服务商的。更稳妥的方式是直接用Python的requests库调用DBS的REST API,这样能完全掌控请求的结构和参数。
如果想找第三方库,优先查看DBS开发者平台的合作伙伴资源或社区贡献库,但一定要先验证其安全性和兼容性。

3. 已知涉及API调用和redirect URI,该如何在本场景中应用?

Redirect URI主要用于OAuth 2.0的授权码流程,适合需要用户交互的Web应用。但你的场景是终端运行脚本,属于服务端到服务端的调用,通常用**客户端凭证流(Client Credentials Flow)**获取访问令牌即可,这种流程不需要redirect URI——直接用Client ID和Client Secret向DBS授权服务器请求token就行。
如果确实需要涉及用户授权的流程(比如指定用户账户转账),可以临时设置一个本地可访问的URI(比如http://localhost:8000/callback),在终端启动一个简单的HTTP服务器接收回调的授权码,再用这个码换取token。

4. 我仅需通过终端运行脚本而非开发应用,如何获取ClientID、ClientSecret及token?

步骤如下:

  1. 先在DBS开发者平台注册开发者账户,创建一个应用(哪怕是终端脚本,也需要创建应用来获取凭证);
  2. 申请PayNow转账相关的API权限,确保你的应用被授权访问对应接口;
  3. 获取Client ID和Client Secret后,用requests库调用DBS的授权接口获取access token,示例代码如下:
import requests

auth_url = "https://api.dbs.com/oauth/token"
payload = {
    "grant_type": "client_credentials",
    "client_id": "你的Client ID",
    "client_secret": "你的Client Secret"
}
response = requests.post(auth_url, data=payload)
token_data = response.json()
access_token = token_data.get("access_token")
  1. 后续调用PayNow转账API时,需要在请求头中携带这个token,格式为Authorization: Bearer {access_token}。

内容的提问来源于stack exchange,提问作者Julliard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:23:24