class Payment(): def __init__(self, appid, url): ''' 支付接口初始化 :param appid: 商户appid :param url: 支付宝接口url ''' self.app_private_key_string = '-----BEGIN PRIVATE KEY-----\nMIIEowIBAAKCAQEAqZMJzkFNcLzWQrgbXtZIDKNoWAIOv8P+TegdlGvjmabh+2lQTxJ+x3od7UgIBsJsdFzYCx1EADQu/q9nObBqMgNIYGY0yX0nDPiMnmh7VnL232y7dMGr/N0HSKSLEuHmF7J3eTMcom+I0WQ9KMIsdYpx9mOQnKZqpkfYj2J/Gv+ZGW6WRsGZZarDLAOpSJWTVrhnJsYczMbOtJi1T4yCnkauMbdH+n7+s5Q1c1WnMmxJSzBOyxCJTpUIcwG/yhM94g5bY853YTrmCxNQwkf6gmP3JNmK9yMVKsizS6ycgdAKrBALgo+TxhqtNBdvg2shHSdXRx2/mgiD0TFPeHWsDQIDAQABAoIBAQCFi+xUCG/RkpZ3MwEzPjS95088yFoPQm6bsmrhQdqcXqZoVndN3rYDqTO6dFkF4caCGcB3eFPeiTpdj4wPDdWEj7tHWBbIfAzuFSzBcG16Fs5ABSTYfdJSMUwUNKnmdAu+q+mVhOBPOOGaboQP/mP/Kco4jg8Mn68sRzbRLXQGsO0Es2u0iIemRUorHiGLl+HUbzDoz/J5gthuqismQxL+MpdLDGK59hVtf8IYTRGNovTN/nTQHp4HJSB0MSYQtAP0GOOkAoYxsY7b9N3/EM8HA2unF2lk/zsnsIMkT7VGXBLIR3U3kEmiCgEkryT2GqEF8xlpcM3p+f9nZf33sysNAoGBAOkgD0ELzu7HPNlv6tth6xf3ZuKe50BdCq/S41fvjm/Po8ya+YYX0hUDHX5w22S2noKI/2GnOsCEHpZS6f6/GazB+x/OxgVnO0FpkEE+tJrcgfgqCZo5QwaXl8f+1qAud2NdFxNUOneWHfEN5RSez0WipMufYCqAoCObTjjcpqlXAoGBALo2oEgw0EDO8X1OrZIrUzGj+DTWq662hvb2DSXIAJtUXp1KowEZS7mQiQyMpGubvRlF8Sqmo0kzhPxLU3dUBnRkOebyBGHJO7Nsi6qacTQradeGgpT8HC5iP1+WhvcSlkGEjyAxcJt5XLhEXzHztsoZ0HcWo9GHJJsHcJM/8GM7AoGAWzr3nT3wwlLoBjOdFjNwnBVuhvsmhnKizwHZhD00YZ9Be72eLpK93Qk2Dpg902EAERdp0Z5vCI3rpmpWNiI0+v2CuATkS5MFhmi4UkAmz3/BwQs6bMdB6p+Cf3rEJTVp9VGlySOqKchueTo1zucDOD4Y/bKmIJvrj2Okre3zrssCgYBgi9AAfeaLo4ALgw51Gadxtl0LMD4lQJerVZktfIvr/QttK/RlrnLXjDuyWP0qmb2qa9wFTA6e9mo90OQ+mz8Ze5mVxudEt+wPM/kaBCcrcFLZHvF3Q1ttJR1MdyQU1/s1jwASJfAHfB35n+Fnab/c+xNdm0xmZ1YwVuQkRGNjXwKBgB1HwcjqW5PrNFI84F6j7hXWu5sLYk/gfg9FD5sdmuyff2dF3K69Pz+sa9YAk89tPTECG0ZkxJGKdgMfUJP3acQq1m7cfH42vtRhwYTD3NYRPv+x1jMz+qOxlxQMk06vvTr0WHps1UH3x8+8MzLSpE6l1ixAdLigL+HmciaDA/63\n-----END PRIVATE KEY-----' # 应用私钥(默认从两个TXT文件中读取) self.alipay_public_key_string = '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5+VdFftdI5tx07pkt+4etlirJm2XXmETQ3gfIaITGxicOMbb8Psvvl1TOLmC8Z+F9bqGBc1dqoN/TylKZZDB85VSOSV2F+4tAby9uKaYyt4KobAv2+5Qyyq2qumh3Bf8njLcNtN28eBq/pFvM2aDATj8Cv+ggSjNf/YcX2/xqIjsoxaGntipbzJXPIgbwfVDVBzcsCOj+GDDxTJ7OyS7XIlZ/jQNp5Jx/HcrjYyOMOkMnxXBiudFmyPE0J4J0ztVPU2r784xw0uQyUjibXnaNo5Gs9x+j9myskT7w9tOO26o6ganPzRzb8NGxZfYxHSWuuBxqLO93hRBm8eLYgU77QIDAQAB\n-----END PUBLIC KEY-----' # 支付宝公钥 self.alipay = AliPay( appid=appid, app_notify_url=url, app_private_key_string=self.app_private_key_string, alipay_public_key_string=self.alipay_public_key_string, sign_type="RSA2", debug=False) def pay(self, out_biz_no, payee_account, amount, payee_real_name=None, remark=u'热量星球提现', payer_show_name=u'热量星球', payee_type="ALIPAY_LOGONID"): ''' 发起转账 :param payee_account: 收款方账户 :param amount: 转账金额 :param payee_real_name: :param remark: 收款方姓名 :param payer_show_name: 转账备注 :param payee_type: 付款方姓名 :return: ''' try: result = self.alipay.api_alipay_fund_trans_toaccount_transfer( out_biz_no=out_biz_no, payee_type=payee_type, payee_account=payee_account, amount=amount, payee_real_name=payee_real_name, remark=remark, payer_show_name=payer_show_name ) except Exception as e: # 签名错误 return False, u'支付宝提现系统升级中!' # 转账成功 if result.get('code') == '10000': if result.get('msg') == "Success": return True, result.get('order_id', '') else: if result.get('code') == '20000': # 签名错误 return False, u'服务暂时不可用!' elif result.get('code') == '40004': # 签名错误 print (result.get('sub_msg')) return False, result.get('sub_code') else: # 签名错误 return False, u'支付宝提现系统升级中!'
class Payment(object): def __init__(self, url="https://openapi.alipay.com/gateway.do"): ''' 支付接口初始化 :param appid: 商户appid(直接从文件读取) :param url: 支付宝接口url ''' self.app_private_key_string = open( current_path + "/app_private_key.txt").read() # 应用私钥(默认从两个TXT文件中读取) self.alipay_public_key_string = open( current_path + "/alipay_public_key.txt").read() # 支付宝公钥 self.appid = int(open(current_path + "/appid.txt").read()) # 支付宝应用id self.alipay_each = AliPay( appid=self.appid, app_notify_url=url, app_private_key_string=self.app_private_key_string, alipay_public_key_string=self.alipay_public_key_string, sign_type="RSA2", debug=False) def pay(self, payee_account, amount, id, payee_real_name=None, remark=None, payer_show_name=None, payee_type="ALIPAY_LOGONID"): ''' 发起转账 :param id : 是数据库中体现记录的唯一值 :param payee_account: 收款方账户 :param amount: 转账金额 :param payee_real_name:收款方姓名 :param remark: 转账备注 :param payer_show_name: 付款方姓名 :param payee_type: 收款方类型 :return: ''' out_biz_no = datetime.now().strftime("%Y%m%d%H%M%S") + str( random.randint(1000, 9999)) UN_PID = str(random.randint( 10, 99)) + datetime.now().strftime("%Y%m%d%H%M%S") + str( random.randint(10, 99)) data = { 'payee_account': None, 'amount': None, 'payee_real_name': None, 'remark': None, 'order_id': None, 'out_biz_no': None, 'pay_date': None, 'status': None, "id": id, 'un_pid': UN_PID } try: # 使用封装好的方法去执行转账操作,并将返回值赋值给result这个变量 result = self.alipay_each.api_alipay_fund_trans_toaccount_transfer( out_biz_no=out_biz_no, # 订单编号(时间字符串加随机数) payee_type=payee_type, # 收款方账户类型 payee_account=payee_account, # 收款方账户 amount=amount, # 转账金额 payee_real_name=payee_real_name, # 收款方姓名(可选,若不匹配则转账失败) remark=remark, # 转账备注 payer_show_name=payer_show_name # 付款方姓名 ) ## try代码块里面的是进行转账操作,如果说转账操作因为网络问题延迟了,会报错,则我们就执行下面代码块里面的内容。 except: data['payee_account'] = payee_account data['amount'] = amount data['payee_real_name'] = payee_real_name data['status'] = "转账过程中超过支付宝限制时间,请排除已转账的记录重新转账!" #转账超时而失败怎么办?直接更新数据库中待体现的那条记录,status为1 并remark备注返回 # error = [payee_account, amount, payee_real_name, result['sub_msg'], result['out_biz_no']] return data #成功的返回值 result={'code':'10000','msg':'Success','order_id': '','out_biz_no': '', 'pay_date': '2017-06-26 14:36:25'} # 接口文档:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer try: if result['code'] == '10000': # if result['msg'] == "Success": # print(payee_account + " 转账成功" + " 交易单号:" + result["out_biz_no"]) data['payee_account'] = payee_account data['amount'] = amount data['payee_real_name'] = payee_real_name data['order_id'] = result['order_id'] data['out_biz_no'] = result['out_biz_no'] data['pay_date'] = result['pay_date'] data['status'] = '转账成功' print(payee_account, amount, "转账成功") return data # 转账失败 # result={'code': '40004', 'msg': 'Business Failed', 'sub_code': 'PAYEE_USER_INFO_ERROR', 'sub_msg': '支付宝账号和姓名不匹配,请确认姓名是否正确', 'out_biz_no': '20180802150835'} else: print(payee_account, amount, result['sub_msg']) data['payee_account'] = payee_account data['amount'] = amount data['payee_real_name'] = payee_real_name data['out_biz_no'] = result['out_biz_no'] data['status'] = result['sub_msg'] # error = [payee_account, amount, payee_real_name, result['sub_msg'], result['out_biz_no']] return data except: # print(payee_account, amount, result['sub_msg'], result["out_biz_no"]) data['payee_account'] = payee_account data['amount'] = amount data['payee_real_name'] = payee_real_name # data['out_biz_no'] = result['out_biz_no'] data['out_biz_no'] = out_biz_no data['status'] = "账号问题,转账失败!!!!!!!" # error = [payee_account, amount, payee_real_name, result['sub_msg'], result['out_biz_no']] return data