Python版支付宝集成插件源代码

之前在做一项目的时候需要集成支付宝功能,网站是用python做的,参照支付宝的官方文档,写了以下代码(调试通过,能正常工作): 
Python代码   收藏代码
  1. # -*- coding: utf-8 -*-  
  2. #!/usr/bin/env python  
  3. # author: Robin Huang  
  4. # time  : 2009-03-30  
  5.   
  6. import md5  
  7.   
  8. class Alipay(object):  
  9.     def __init__(self):  
  10.         self.params = {}  
  11.         # 支付宝gateway   
  12.         self.pay_gate_way = 'https://www.alipay.com/cooperate/gateway.do'  
  13.         # 安全码 ***处请填具体安全码  
  14.         self.security_code = '***'   
  15.           
  16.     #---------------------------------------------------------------------------  
  17.     # 根据订单生成支付宝接口URL  
  18.     # <<<<< Protocol Param >>>>>  
  19.     # @ input_charset: 编码方式  
  20.     # @ service: 接口名称, 有两种方式 =>  
  21.     #            1. trade_create_by_buyer (担保付款)   
  22.     #            2. create_direct_pay_by_user (直接付款)  
  23.     # @ partner : 商户在支付宝的用户ID  
  24.     # @ show_url: 商品展示网址  
  25.     # @ return_url: 交易付款成功后,显示给客户的页面  
  26.     # @ sign_type: 签名方式  
  27.     #  
  28.     # <<<<< Business Param >>>>>  
  29.     # @ subject: 商品标题  
  30.     # @ body: 商品描述  
  31.     # @ out_trade_no: 交易号(确保在本系统中唯一)  
  32.     # @ price: 商品单价  
  33.     # @ discount: 折扣 -**表示抵扣**元  
  34.     # @ quantity: 购买数量  
  35.     # @ payment_type: 支付类型  
  36.     # @ logistics_type: 物流类型 => 1. POST (平邮) 2. EMS 3. EXPRESS (其他快递)  
  37.     # @ logistics_fee: 物流费  
  38.     # @ logistics_payment: 物流支付类型 =>   
  39.     #                      1. SELLER_PAY (卖家支付) 2. BUYER_PAY (买家支付)  
  40.     # @ seller_email: 卖家支付宝帐户email  
  41.       
  42.     # @return   
  43.     #---------------------------------------------------------------------------  
  44.     def create_order_alipay_url(self,   
  45.                                 input_charset,   
  46.                                 service,   
  47.                                 partner,   
  48.                                 show_url,   
  49.                                 return_url,   
  50.                                 sign_type,  
  51.                                 subject,   
  52.                                 body,   
  53.                                 out_trade_no,   
  54.                                 price,   
  55.                                 discount,   
  56.                                 quantity,   
  57.                                 payment_type,   
  58.                                 logistics_type,   
  59.                                 logistics_fee,   
  60.                                 logistics_payment,   
  61.                                 seller_email  
  62.                                 ):   
  63.         self.params['_input_charset'] = input_charset  
  64.         self.params['service'] = service  
  65.         self.params['partner'] = partner  
  66.         self.params['show_url'] = show_url  
  67.         self.params['return_url'] = return_url  
  68.         self.params['subject'] = subject  
  69.         self.params['body'] = body  
  70.         self.params['out_trade_no'] = out_trade_no  
  71.         self.params['price'] = price  
  72.         self.params['discount'] = discount  
  73.         self.params['quantity'] = quantity  
  74.         self.params['payment_type'] = payment_type  
  75.         self.params['logistics_type'] = logistics_type  
  76.         self.params['logistics_fee'] = logistics_fee  
  77.         self.params['logistics_payment'] = logistics_payment  
  78.         self.params['seller_email'] = seller_email  
  79.         # 返回结果  
  80.         return self._create_url(self.params, sign_type)  
  81.       
  82.     def _create_url(self, params, sign_type='MD5'):   
  83.         param_keys = params.keys()  
  84.         # 支付宝参数要求按照字母顺序排序  
  85.         param_keys.sort()  
  86.         # 初始化待签名的数据  
  87.         unsigned_data = ''  
  88.         # 生成待签名数据  
  89.         for key in param_keys:  
  90.             unsigned_data += key + '=' + params[key]  
  91.             if key != param_keys[-1]:  
  92.                 unsigned_data += '&'  
  93.         # 添加签名密钥  
  94.         unsigned_data += self.security_code  
  95.         # 计算sign值  
  96.         if sign_type == 'MD5':  
  97.             M = md5.new()  
  98.             M.update(unsigned_data)  
  99.             sign = M.hexdigest()  
  100.         else:  
  101.             sign = ''  
  102.         request_data = self.pay_gate_way + '?'  
  103.         for key in param_keys:  
  104.             request_data += key + '=' + params[key].decode('utf8').encode(params['_input_charset'])  
  105.             request_data += '&'  
  106.         request_data += 'sign=' + sign + '&sign_type=' + sign_type  
  107.         # 返回结果  
  108.         return request_data  
  109.       


希望对大家有所帮助,如需转载请标明出处: http://huangro.iteye.com/admin/blogs/382133
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值