Beispiel #1
0
    def __init__(self, trade_no, price=0.01):
        self.UID = "2016101200668491"
        self.ZFB_DNS = "https://openapi.alipaydev.com/gateway.do"

        self.APP_PRIVATE = """-----BEGIN RSA PRIVATE KEY-----
                        MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCBWkjIWeZMyYVBD9YNOYP6n0qPZrM3ZYt1cVzSG/ClARgJdJqsy1eGLHKe3ieeaoqJRu8PvRzYwgbBXa8IlsddT3y7+ERi9kohMWrafHCAT2aqxXdEaRq3KH0x2el8KnSBYq6Mv1K4WVZ60+D2IYAMtRUPCjm3opIGndZ5iEdkClhynMQ/wBc4xyexxQVPdhtF+GDEFQD92WzWGk1XM8/wgwjiGvUeZa42I1+6O59yVZywaQydFFoXnAXmSaLJ1j+GOAEu6c098e8a/r1Q0WXI9WhiKgAR/is39IOPhseuyHi2ueux64DjSmpxRvRjupyBNXxkQ+V6SSBtw6uMK9/RAgMBAAECggEAJzjZGOcpjd8NKM1Een4WJshmM1VQwltoDhRxsMQIFABg6X0R6ZM+1tBjcQirur1ThIydsIgHVzJ+GePuTwxpJ0IS8Gw3UEqd77KsU9OnyUBKQT3fDD9SencsfxE0WxIEgbcKdmMNEhkEv/m/HOLLkQ7Xc9gF6EjDPn5dqjxIaWzLQqgcqKmxMOznUv5XQAp5nLRrgWgJgS3tdxPt2ojRnKsHEmfgu6jskL+X7jn4R5Br9LXjXAXS7q7tZtHI80oZzE+nGyAhdkKJgvyalpE5MnmjkbwJVasTM6Ly1CSFDpETu75ZnAHiEQIXmnMp2KJlWzlYWjRwkQtRIpU23vK2AQKBgQC6Db/LOQfxzhET5pJpYoYGdkbr1aRmGJquoi9EYTjzaMisyg+VmwzIuFrN6JuugGG3GCUG7If8sOdCiP7img4qjVHt+TE+1mQR3nHUQUeh79awNpkr7Usgbdbr9mf/pxsL5Z80mA6jLkaTMKV+WpnljsLnUEtllTNLLFViQfcd5QKBgQCx+34qsORVt9MIqiVJFiOxXo8inWOvY4AZp702iHHXgzyUMP+VeIEwmai3J41OgOMn5ieuEHtFOikQlcd0roFrqnOih6nCeGeHa3eBV4cWqQ7FNx0NoO6z0uZE2l2HeZUSyKBq6N1Nl7FIQBRrk+T3SXJUhFjTGKsJBL/+ajy7fQKBgFa268o7BYHkyj7dOyYU/mRqoflu9JWFKCr2elNDgPipwMYP0x2mS1oN2nyXyl+VhHWCslc8zNCwXsi68xkINkwM27+vYg1ofPF7HNCRsGJAV25/s/ouOdKefwoxKR2Vc9yipAYuTLwvaENX6/otHgdI93w6BzoMRQDnY9BM8HElAoGAeNqRqEFnOoFRDiAio0ciQ202+kUvDEgfEsygoafyzWkyuFmxIvipmKuuMXfs7rJ8DHqu1PYiDjbY7YcW4bcg8E/UpzdBYWjKu9yQUEZz10JCYk3zL27oxzhc3cH9ImG/hPqwWwf2RZrMaYgBla7eGcBInvUjL2wfr0cHa6UNyi0CgYBCOYdMFk72i0GCpVwMLp4/I8N97BLhDtRf0N55i/nUCZwGOQijyfFKoP0GlgfO0eSVzUNZl25sYcwTyzOZLhOpmEAX/Z1yyd4DaUUXu/vx5If5Gtr1TFiCmjDion78BRqoXg5RCHQs6uWpq2D0YhoO/2qKsrvoYqw5twsx40u/8w==
                        -----END RSA PRIVATE KEY-----"""
        self.APP_PUBLIC = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgVpIyFnmTMmFQQ/WDTmD+p9Kj2azN2WLdXFc0hvwpQEYCXSarMtXhixynt4nnmqKiUbvD70c2MIGwV2vCJbHXU98u/hEYvZKITFq2nxwgE9mqsV3RGkatyh9MdnpfCp0gWKujL9SuFlWetPg9iGADLUVDwo5t6KSBp3WeYhHZApYcpzEP8AXOMcnscUFT3YbRfhgxBUA/dls1hpNVzPP8IMI4hr1HmWuNiNfujufclWcsGkMnRRaF5wF5kmiydY/hjgBLunNPfHvGv69UNFlyPVoYioAEf4rN/SDj4bHrsh4trnrseuA40pqcUb0Y7qcgTV8ZEPlekkgbcOrjCvf0QIDAQAB"
        self.ZFB_PUBLIC = """-----BEGIN PUBLIC KEY-----
                        MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl7OwhGmH/J2aSP3j4Pbk/NxvNhBfAIBDCEujBN9vdnCu3kKA5SNkomvHvdHXM66/3LQhKzigMg9r/y6CrgQJPR8Q+wHrRiGXbLmIqJw2pMVfXgms1gr1Mz9aR3GbuIzTMOLcHALWPQ47cNtgPUg1UfRE0NyJMpZ3+crg9Dzt5fJ7BJK+7m9FDX8v7R0axahEkkO0IYaxqHOvZ5v0pygls3z2ZM0gVon63cu1K8PxD2KsNHwK8dUkw6uDY2VqkyYybQGRlT4VWQkDYdPNqzMDmjV7Y4DjX+b/JV+Wu7mYY6llosNT30yQhKhcb1C5MEPulvbeOrjdxP59+niERAV/4QIDAQAB
                        -----END PUBLIC KEY-----"""
        self.trade_no = trade_no
        self.subject = "vip充值"
        self.price = price
        self.NOTIFY_URL = None
        self.RETURN_URL = "http://127.0.0.1:8000/recharge_vip/"
        self.BASE_DIR = os.path.dirname(
            os.path.dirname(os.path.abspath(__file__)))
        self.ali = alipay.AliPay(
            appid=self.UID,
            app_notify_url=None,  # 默认回调url
            app_private_key_string=self.APP_PRIVATE,
            alipay_public_key_string=self.
            ZFB_PUBLIC,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False
        )
Beispiel #2
0
 def get(self, request):
     # 接受订单id
     order_id = request.GET.get('order_id')
     if not order_id:
         return JsonResponse({'code': 2, 'message': '缺少订单id'})
         # 校验订单id
     try:
         # 查询该用户提交的该订单号订单,确认是该登陆用户的订单,状态并且是待支付状态,&&支付方式是支付宝
         order = OrderInfo.objects.get(order_id=order_id,
                                       user=request.user,
                                       # 点带支付去查询待支付,还没支付成功
                                       status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'],  # 类似枚举
                                       pay_method=OrderInfo.PAY_METHODS_ENUM['ALIPAY']
                                       )
     except OrderInfo.DoesNotExist as e:
         return JsonResponse({'code': 2, 'message': '订单不存在'})
     # 创建alipay 对象对接支付宝
     my_alipay = alipay.AliPay(
         appid=settings.ALIPAY_APPID,
         app_notify_url=None,  # 默认回调url  测试不要写成空字符串
         # 自己生产的私钥
         app_private_key_path=settings.APP_PRIVATE_KEY_PATH,  # 路径也是能读取出来的
         # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
         alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY_PATH,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
         sign_type="RSA2",  # RSA 或者 RSA2=>2048 openssl
         debug=True  # 默认False  True 是沙箱模式
     )
     # 循环查询,直到成功|失败
     while True:
         # 调用查询接口,读取code 和trade_status 判断订单状态
         response_dict = my_alipay.api_alipay_trade_query(order_id)  # 一种接受商家维护的订单id去查 | 也可以接受支付宝维护的订单id去查
         # 上面的返回值一个字典,包含了支付宝相应给调用者的参数信息 包括 code 和trade_status 和trade_no(支付宝维护的订单id)
         code = response_dict.get('code')
         trade_status = response_dict.get('trade_status')
         if code == '10000' and trade_status == 'TRADE_SUCCESS':
             order.trade_id = response_dict.get('trade_no')
             order.status = OrderInfo.ORDER_STATUS_ENUM['UNCOMMENT']
             order.save()
             return JsonResponse({'code': 0, 'message': '支付ok'})
         elif code == '40004' or (code == '10000' and trade_status == 'WAIT_BUYER_PAY'):
             # 有待商量,继续等待继续查询
             continue
         else:
             # 失败
             return JsonResponse({'code': 4, 'message': '支付失败'})
Beispiel #3
0
    def post(self, request):
        """接受订单信息order_id 查询订单 创建alipay 调用接口 返回url(json) 跳转"""
        order_id = request.POST.get('order_id')
        if not order_id:
            return JsonResponse({'code': 3, 'message': '缺少订单id'})
        # 校验订单id
        try:
            # 查询该用户提交的该订单号订单,确认是该登陆用户的订单,状态并且是待支付状态,&&支付方式是支付宝
            order = OrderInfo.objects.get(order_id=order_id,
                                          user=request.user,
                                          status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'],  # 类似枚举
                                          pay_method=OrderInfo.PAY_METHODS_ENUM['ALIPAY']
                                          )
        except OrderInfo.DoesNotExist as e:
            return JsonResponse({'code': 2, 'message': '订单不存在'})
        # 创建alipay 对象对接支付宝
        my_alipay = alipay.AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url  测试不要写成空字符串
            # 自己生产的私钥
            app_private_key_path=settings.APP_PRIVATE_KEY_PATH,  # 路径也是能读取出来的
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
            alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY_PATH,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2=>2048 openssl
            debug=True  # 默认False  True 是沙箱模式
        )
        # 电脑网站支付,需要跳转到https://openapi.alipay[dev].com/gateway.do? + order_string
        order_string = my_alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),  # 将浮点数转成字符串
            subject='头条天天生鲜',  # 标题无关太紧要
            return_url=None,
            notify_url=None  # 可选, 不填则使用默认notify url
        )
        # 生成打开支付宝的url
        url = settings.ALIPAY_URL + '?' + order_string

        # 响应url给前台(JsonResponse)
        return JsonResponse({'code': 0, 'message': '支付成功', 'url': url})
Beispiel #4
0
import alipay

UID = "2016101200668491"
ZFB_DNS = "https://openapi.alipaydev.com/gateway.do"

APP_PRIVATE = """-----BEGIN RSA PRIVATE KEY-----
    MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCBWkjIWeZMyYVBD9YNOYP6n0qPZrM3ZYt1cVzSG/ClARgJdJqsy1eGLHKe3ieeaoqJRu8PvRzYwgbBXa8IlsddT3y7+ERi9kohMWrafHCAT2aqxXdEaRq3KH0x2el8KnSBYq6Mv1K4WVZ60+D2IYAMtRUPCjm3opIGndZ5iEdkClhynMQ/wBc4xyexxQVPdhtF+GDEFQD92WzWGk1XM8/wgwjiGvUeZa42I1+6O59yVZywaQydFFoXnAXmSaLJ1j+GOAEu6c098e8a/r1Q0WXI9WhiKgAR/is39IOPhseuyHi2ueux64DjSmpxRvRjupyBNXxkQ+V6SSBtw6uMK9/RAgMBAAECggEAJzjZGOcpjd8NKM1Een4WJshmM1VQwltoDhRxsMQIFABg6X0R6ZM+1tBjcQirur1ThIydsIgHVzJ+GePuTwxpJ0IS8Gw3UEqd77KsU9OnyUBKQT3fDD9SencsfxE0WxIEgbcKdmMNEhkEv/m/HOLLkQ7Xc9gF6EjDPn5dqjxIaWzLQqgcqKmxMOznUv5XQAp5nLRrgWgJgS3tdxPt2ojRnKsHEmfgu6jskL+X7jn4R5Br9LXjXAXS7q7tZtHI80oZzE+nGyAhdkKJgvyalpE5MnmjkbwJVasTM6Ly1CSFDpETu75ZnAHiEQIXmnMp2KJlWzlYWjRwkQtRIpU23vK2AQKBgQC6Db/LOQfxzhET5pJpYoYGdkbr1aRmGJquoi9EYTjzaMisyg+VmwzIuFrN6JuugGG3GCUG7If8sOdCiP7img4qjVHt+TE+1mQR3nHUQUeh79awNpkr7Usgbdbr9mf/pxsL5Z80mA6jLkaTMKV+WpnljsLnUEtllTNLLFViQfcd5QKBgQCx+34qsORVt9MIqiVJFiOxXo8inWOvY4AZp702iHHXgzyUMP+VeIEwmai3J41OgOMn5ieuEHtFOikQlcd0roFrqnOih6nCeGeHa3eBV4cWqQ7FNx0NoO6z0uZE2l2HeZUSyKBq6N1Nl7FIQBRrk+T3SXJUhFjTGKsJBL/+ajy7fQKBgFa268o7BYHkyj7dOyYU/mRqoflu9JWFKCr2elNDgPipwMYP0x2mS1oN2nyXyl+VhHWCslc8zNCwXsi68xkINkwM27+vYg1ofPF7HNCRsGJAV25/s/ouOdKefwoxKR2Vc9yipAYuTLwvaENX6/otHgdI93w6BzoMRQDnY9BM8HElAoGAeNqRqEFnOoFRDiAio0ciQ202+kUvDEgfEsygoafyzWkyuFmxIvipmKuuMXfs7rJ8DHqu1PYiDjbY7YcW4bcg8E/UpzdBYWjKu9yQUEZz10JCYk3zL27oxzhc3cH9ImG/hPqwWwf2RZrMaYgBla7eGcBInvUjL2wfr0cHa6UNyi0CgYBCOYdMFk72i0GCpVwMLp4/I8N97BLhDtRf0N55i/nUCZwGOQijyfFKoP0GlgfO0eSVzUNZl25sYcwTyzOZLhOpmEAX/Z1yyd4DaUUXu/vx5If5Gtr1TFiCmjDion78BRqoXg5RCHQs6uWpq2D0YhoO/2qKsrvoYqw5twsx40u/8w==
    -----END RSA PRIVATE KEY-----"""
APP_PUBLIC = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgVpIyFnmTMmFQQ/WDTmD+p9Kj2azN2WLdXFc0hvwpQEYCXSarMtXhixynt4nnmqKiUbvD70c2MIGwV2vCJbHXU98u/hEYvZKITFq2nxwgE9mqsV3RGkatyh9MdnpfCp0gWKujL9SuFlWetPg9iGADLUVDwo5t6KSBp3WeYhHZApYcpzEP8AXOMcnscUFT3YbRfhgxBUA/dls1hpNVzPP8IMI4hr1HmWuNiNfujufclWcsGkMnRRaF5wF5kmiydY/hjgBLunNPfHvGv69UNFlyPVoYioAEf4rN/SDj4bHrsh4trnrseuA40pqcUb0Y7qcgTV8ZEPlekkgbcOrjCvf0QIDAQAB"
ZFB_PUBLIC = """-----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl7OwhGmH/J2aSP3j4Pbk/NxvNhBfAIBDCEujBN9vdnCu3kKA5SNkomvHvdHXM66/3LQhKzigMg9r/y6CrgQJPR8Q+wHrRiGXbLmIqJw2pMVfXgms1gr1Mz9aR3GbuIzTMOLcHALWPQ47cNtgPUg1UfRE0NyJMpZ3+crg9Dzt5fJ7BJK+7m9FDX8v7R0axahEkkO0IYaxqHOvZ5v0pygls3z2ZM0gVon63cu1K8PxD2KsNHwK8dUkw6uDY2VqkyYybQGRlT4VWQkDYdPNqzMDmjV7Y4DjX+b/JV+Wu7mYY6llosNT30yQhKhcb1C5MEPulvbeOrjdxP59+niERAV/4QIDAQAB
    -----END PUBLIC KEY-----"""
ali = alipay.AliPay(
    appid=UID,
    app_notify_url=None,  # 默认回调url
    app_private_key_string=APP_PRIVATE,
    alipay_public_key_string=ZFB_PUBLIC,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    sign_type="RSA2",  # RSA 或者 RSA2
    debug=True  # 默认False
)
import time

#
trade_no = str(int(time.time()))
subject = "vip充值"
price = 0.01
order_string = ali.api_alipay_trade_app_pay(
    out_trade_no=trade_no,
    total_amount=price,
    subject=subject,
    notify_url=None  # 可选, 不填则使用默认notify url
)