Ejemplo n.º 1
0
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'支付宝提现系统升级中!'
Ejemplo n.º 2
0
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