Giter Club home page Giter Club logo

alipay's Introduction

An Unofficial Alipay API for Python

Overview

An Unofficial Alipay API for Python, It Contain these API:

  • Generate direct payment url
  • Generate partner trade payment url
  • Generate standard mixed payment url
  • Generate batch trans pay url
  • Generate send goods confirm url
  • Generate forex trade url
  • Generate QR code url
  • Verify notify
  • Single Trade Query
  • Generate Refund With Pwd URL

official document: https://b.alipay.com/order/techService.htm

Install

pip install alipay

Usage

Initialization

>>> from alipay import Alipay
>>> alipay = Alipay(pid='your_alipay_pid', key='your_alipay_key', seller_email='your_seller_mail')

Or you can use seller_id instead of seller_email:

>>> alipay = Alipay(pid='your_alipay_pid', key='your_alipay_key', seller_id='your_seller_id')

Generate direct payment url

生成即时到账支付链接

Introduction: https://b.alipay.com/order/productDetail.htm?productId=2012111200373124

>>> alipay.create_direct_pay_by_user_url(out_trade_no='your_order_id', subject='your_order_subject', total_fee='100.0', return_url='your_order
_return_url', notify_url='your_order_notify_url')
'https://mapi.alipay.com/gateway.do?seller_email=.....'

Generate partner trade payment url

生成担保交易支付链接

Introduction: https://b.alipay.com/order/productDetail.htm?productId=2012111200373121

>>> params = {
... 'out_trade_no': 'your_order_id',
... 'subject': 'your_order_subject',
... 'logistics_type': 'DIRECT',
... 'logistics_fee': '0',
... 'logistics_payment': 'SELLER_PAY',
... 'price': '10.00',
... 'quantity': '12',
... 'return_url': 'your_order_return_url',
... 'notify_url': 'your_order_notify_url'
... }
>>> alipay.create_partner_trade_by_buyer_url(**params)
'https://mapi.alipay.com/gateway.do?seller_email=.....'

Generate standard mixed payment url

生成标准双接口支付链接

Introduction: https://b.alipay.com/order/productDetail.htm?productId=2012111300373136

>>> alipay.trade_create_by_buyer_url(**params)
'https://mapi.alipay.com/gateway.do?seller_email=.....'

Generate batch trans pay url

生成批量付款链接

Introduction: https://b.alipay.com/order/productDetail.htm?productId=2012111200373121

>>> params = {
... 'batch_list': (), #批量付款用户列表
... 'account_name': 'seller_account_name', #卖家支付宝名称
... 'batch_no': 'batch_id', #转账流水号,须唯一
... 'notify_url': 'your_batch_notify_url' #异步通知地址
... }
>>> alipay.create_batch_trans_notify_url(**params)
'https://mapi.alipay.com/gateway.do?seller_email=xxx&detail_data=....'

Note: batch_list 为批量付款用户列表,具体格式如下例子:(如涉及中文请使用unicode字符)

>>> batch_list = ({'account': '[email protected]', #支付宝账号
...                'name': u'测试', #支付宝用户姓名
...                'fee': '100', #转账金额
...                'note': 'test'},
...               {'account': '[email protected]', #支付宝账号
...                'name': u'测试', #支付宝用户姓名
...                'fee': '100', #转账金额
...                'note': 'test'}) #转账原因

Generate send goods confirm url

生成确认发货链接

Introduction: https://cshall.alipay.com/support/help_detail.htm?help_id=491097

>>> params = {
... 'trade_no': 'your_alipay_trade_id',
... 'logistics_name': 'your_logicstic_name',
... 'transport_type': 'EXPRESS',
... 'invocie_no': 'your_invocie_no'
... }
>>> alipay.send_goods_confirm_by_platform(**params)
'https://mapi.alipay.com/gateway.do?sign=.....&trade_no=...'

Generate forex trade url

  • Create website payment for foreigners (With QR code)
  • Create mobile payment for foreigners

Introduction: http://global.alipay.com/ospay/home.htm

>>> params = {
... 'out_trade_no': 'your_order_id',
... 'subject': 'your_order_subject',
... 'logistics_type': 'DIRECT',
... 'logistics_fee': '0',
... 'logistics_payment': 'SELLER_PAY',
... 'price': '10.00',
... 'quantity': '12',
... 'return_url': 'your_order_return_url',
... 'notify_url': 'your_order_notify_url'
... }
>>> # Create website payment for foreigners
>>> alipay.create_forex_trade_url(**params)
'https://mapi.alipay.com/gateway.do?service=create_forex_trade......'
>>> # Create mobile payment for foreigners
>>> alipay.create_forex_trade_wap_url(**params)
'https://mapi.alipay.com/gateway.do?service=create_forex_trade_wap......'

Generate QR code url

生成创建 QR 码链接

Introduction: https://b.alipay.com/order/productDetail.htm?productId=2012120700377303

>>> alipay.add_alipay_qrcode_url(**params)
'https://mapi.alipay.com/gateway.do?seller_id=.......'

Note: 如果你的 biz_data 中有 Unicode 字符,在 dumps 的时候需要把 ensure_ascii 设置为 False,即 json.dumps(d, ensure_ascii=False) 否则会遇到错误

Verify notify

verify notify from alipay server, example in Pyramid Application

def alipy_notify(request):
    alipay = request.registry['alipay']
    if alipay.verify_notify(**request.params):
        # this is a valid notify, code business logic here
    else:
        # this is a invalid notify

Single Trade Query

单笔交易查询

文档:http://wenku.baidu.com/link?url=WLjyz-H6AlfDLIU7kR4LcVNQgxSTMxX61fW0tDCE8yZbqXflCd0CVFsZaIKbRFDvVLaFlq0Q3wcJ935A7Kw-mRSs0iA4wQu8cLaCe5B8FIq

import re
xml = alipay.single_trade_query(out_trade_no="10000005")
res = re.findall('<trade_status>(\S+)</trade_status>', xml) # use RE to find trade_status, xml parsing is more useful, in fact.
status = None if not res else res[0]
print status # will print out TRADE_SUCCESS when trade is success

Generate Refund With Pwd URL

生成即时到账有密退款链接

Introduction: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.XRddqH&treeId=62&articleId=104744&docType=1

>>> params = {
... 'batch_list': (), #批量退款数据集
... 'batch_no': 'batch_id', #退款批次号,须唯一
... 'notify_url': 'your_batch_notify_url' #异步通知地址
... }
>>> alipay.refund_fastpay_by_platform_pwd(**params)
'https://mapi.alipay.com/gateway.do?seller_email=xxx&detail_data=....'

Note: batch_list 为批量退款数据集,具体格式如下例子:(如涉及中文请使用unicode字符)

>>> batch_list = ({'trade_no': 'xxxxxxxx', #原付款支付宝交易号
...                'fee': '100', #退款总金额
...                'note': 'test'}, #退款原因
...               {'trade_no': 'xxxxxxxx', #原付款支付宝交易号
...                'fee': '100', #退款总金额
...                'note': 'test'}) #退款原因

Example in Pyramid Application

Include alipay either by setting your includes in your .ini, or by calling config.include('alipay').

pyramid.includes = alipay

now in your View

def some_view(request):
    alipay = request.registry['alipay']
    url = alipay.create_direct_pay_by_user_url(...)

Reference

alipay's People

Contributors

bluedazzle avatar dodoru avatar fanzeyi avatar hexcles avatar lxneng avatar mengzhuo avatar messense avatar psy2848048 avatar rijn avatar sintrb avatar xingkaixin avatar zxkane avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alipay's Issues

通过pip安装0.2.4错误

sudo pip install alipay==0.2.4
Downloading/unpacking alipay==0.2.4
  Downloading alipay-0.2.4.tar.gz
  Running setup.py (path:/tmp/pip_build_root/alipay/setup.py) egg_info for package alipay
    Traceback (most recent call last):
      File "<string>", line 17, in <module>
      File "/tmp/pip_build_root/alipay/setup.py", line 7, in <module>
        CHANGES = open(os.path.join(here, 'CHANGES.rst')).read()
    IOError: [Errno 2] No such file or directory: '/tmp/pip_build_root/alipay/CHANGES.rst'
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 17, in <module>

  File "/tmp/pip_build_root/alipay/setup.py", line 7, in <module>

    CHANGES = open(os.path.join(here, 'CHANGES.rst')).read()

IOError: [Errno 2] No such file or directory: '/tmp/pip_build_root/alipay/CHANGES.rst'

----------------------------------------
Cleaning up...

对pip而言仅仅更新版本号不行吗?

支付宝异步回调收不到信息有人发生过吗?

def notify_url_handler(request):
    if request.method=='POST':
        if alipay.verify_notify(**request.POST.dict()):
            a=Personblling.objects.create(user_id=1,billingmoney=2,billingstatus=True,trade_no=12)
            return HttpResponse("success")
        else:
            return HttpResponse("failed")
    else:
        return HttpResponse("failed")

直接访问连接有用,但是支付后a那条操作无法执行

verify_notify验证失败

alipay.verify_notify(**request.args) failed

对比过示例的pyramid的 request.params

pyramid的request.params是
NestedMultiDict([(u'a', u'111'), (u'b', u'cccc')])

flask的
MultiDict([('a', u'111'), ('b', u'cccc')])

看起来区别好像是 key 一个为 unicode,另一个不是
values 两者都是unicode

您上次让我检查 values 是不是utf-8 编码,那示例应该是能够成功的吧,示例的pyramid也是unicode的

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.