コード例 #1
0
ファイル: views.py プロジェクト: yangzhenweiq/edx-membership
    def post(self, request, *args, **kwargs):
        try:
            package_id = request.POST.get('package_id')
            order = VIPOrder.create_order(request.user, int(package_id))
            if order:
                log.info('****** order id: {} ******'.format(order.id))
                order.pay_type = VIPOrder.PAY_TYPE_BY_ALIPAY_APP
                out_trade_no = create_trade_id(order.id)
                order.outtradeno = out_trade_no
                order.save()
                result = {'order_id': order.id}

                alipay_client_config = AlipayClientConfig()
                alipay_client_config.app_id = smart_str(settings.ALIPAY_APP_INFO['basic_info']['APP_ID'])
                alipay_client_config.sign_type = smart_str(settings.ALIPAY_APP_INFO['other_info']['SIGN_TYPE'])
                with open(settings.ALIPAY_APP_INFO['basic_info']['APP_PRIVATE_KEY'], 'r') as fp:
                    alipay_client_config.app_private_key = fp.read()

                client = DefaultAlipayClient(alipay_client_config=alipay_client_config)

                model = AlipayTradeAppPayModel()
                model.total_amount = smart_str(str_to_specify_digits(str(order.price)))
                model.product_code = smart_str("QUICK_MSECURITY_PAY")
                model.body = smart_str(order.name)
                model.subject = smart_str(order.name)
                model.out_trade_no = smart_str(out_trade_no)
                model.passback_params = smart_str(settings.LMS_ROOT_URL + reverse("vip_purchase"))

                request = AlipayTradeAppPayRequest(biz_model=model)
                request.notify_url = smart_str(settings.ALIPAY_APP_INFO['other_info']['NOTIFY_URL'])
                result['alipay_request'] = client.sdk_execute(request)

                return Response(data=result)
        except Exception, e:
            log.exception(e)
コード例 #2
0
ファイル: views.py プロジェクト: yangzhenweiq/edx-membership
    def get(self, request, *args, **kwargs):
        """
        生成订单 调起H5支付
        跳转到微信支付
        :param request:
        |参数|类型|是否必填|说明|:
        |package_id|int|是|套餐ID|

        ### 示例
        GET /api/v1/vip/pay/wechat_h5/paying/?package_id=1

        :return:
        |参数|类型|说明|
        |href_url|string|跳转微信支付页面链接|
        """

        package_id = request.GET.get('package_id')
        order = VIPOrder.create_order(request.user, package_id)

        if order:
            # 获取二维码链接
            wxh5payconf_pub = WxH5PayConf_pub()
            unifiedorderh5_pub = UnifiedOrderH5_pub()
            total_fee = int(order.price * 100)

            attach_data = settings.LMS_ROOT_URL + reverse("vip_purchase")
            unifiedorderh5_pub.setParameter("body", order.name)
            out_trade_no = create_trade_id(order.id)
            order.pay_type = VIPOrder.PAY_TYPE_BY_WECHAT_H5
            order.outtradeno = out_trade_no
            try:
                order.save()
                unifiedorderh5_pub.setParameter("out_trade_no", out_trade_no)
                unifiedorderh5_pub.setParameter("total_fee", str(total_fee))
                unifiedorderh5_pub.setParameter(
                    "notify_url", wxh5payconf_pub.NOTIFY_URL)
                unifiedorderh5_pub.setParameter("trade_type", "MWEB")
                unifiedorderh5_pub.setParameter("attach", attach_data)
                client_ip = unifiedorderh5_pub.get_client_ip(request)
                unifiedorderh5_pub.setParameter("spbill_create_ip", client_ip)

                prepay_id = unifiedorderh5_pub.getPrepayId()
                mweb_url = unifiedorderh5_pub.getMwebUrl()

                # 返回页面时不使用缓存
                random_str = str(random.randint(100000, 999999))
                redirect_url = settings.LMS_ROOT_URL + reverse("membership_card") + "?random=" +random_str
                mweb_url = mweb_url + "&redirect_url=" + quote_plus(redirect_url)
                data = {
                    'mweb_url': mweb_url
                }
                return Response(xresult(data=data))
            except Exception as ex:
                log.error(ex)
                return Response(xresult(msg='fail', code=-1))

        else:
            return Response(xresult(msg='fail', code=-1))
コード例 #3
0
ファイル: views.py プロジェクト: yangzhenweiq/edx-membership
    def get(self, request, *args, **kwargs):
        """
        生成订单 生成微信支付二维码
        二维码链接 code_url
        跳转到微信支付二维码页面 href_url
        :param request:
        |参数|类型|是否必填|说明|:
        |package_id|int|是|套餐ID|

        ### 示例
        GET /api/v1/vip/pay/wechat/paying/?package_id=1

        :return:
        |参数|类型|说明|
        |href_url|string|跳转微信支付页面链接|
        """

        package_id = request.GET.get('package_id')
        order = VIPOrder.create_order(request.user, package_id)

        if order:
            # 获取二维码链接
            wxpayconf_pub = WxPayConf_pub()
            unifiedorder_pub = UnifiedOrder_pub()
            total_fee = int(order.price * 100)

            attach_data = settings.LMS_ROOT_URL + reverse("vip_purchase")
            unifiedorder_pub.setParameter("body", order.name)
            out_trade_no = create_trade_id(order.id)
            order.pay_type = VIPOrder.PAY_TYPE_BY_WECHAT
            order.outtradeno = out_trade_no
            order.save()

            unifiedorder_pub.setParameter("out_trade_no", out_trade_no)
            unifiedorder_pub.setParameter("total_fee", str(total_fee))
            unifiedorder_pub.setParameter(
                "notify_url", wxpayconf_pub.NOTIFY_URL)
            unifiedorder_pub.setParameter("trade_type", "NATIVE")
            unifiedorder_pub.setParameter("attach", attach_data)

            code_url = unifiedorder_pub.getCodeUrl()
            para_str = "?code_url={}&order_id={}&price={}".format(
                code_url, order.id, order.price)
            href_url = settings.LMS_ROOT_URL + \
                reverse("vip_pay_wechat_qrcode_paying") + para_str

            data = {
                'href_url': href_url,
                'order_id': order.id,
            }
            return Response(xresult(data=data))
        else:
            return Response(xresult(msg='fail', code=-1))
コード例 #4
0
    def post(self, request, *args, **kwargs):
        """
        mobile vip wechat paying
        """
        try:
            package_id = request.POST.get('package_id')
            order = VIPOrder.create_order(request.user, package_id)

            if order:
                # 获取二维码链接
                wxpayconf_pub = AppWxPayConf_pub()
                unifiedorder_pub = AppUnifiedOrder_pub()
                total_fee = int(order.price * 100)

                attach_data = settings.LMS_ROOT_URL + reverse("vip_purchase")
                unifiedorder_pub.setParameter("body", _(order.name))
                out_trade_no = create_trade_id(order.id)
                order.pay_type = VIPOrder.PAY_TYPE_BY_WECHAT_APP
                order.outtradeno = out_trade_no
                order.save()

                unifiedorder_pub.setParameter("out_trade_no", out_trade_no)
                unifiedorder_pub.setParameter("total_fee", str(total_fee))
                unifiedorder_pub.setParameter("notify_url",
                                              wxpayconf_pub.NOTIFY_URL)
                unifiedorder_pub.setParameter("trade_type", "APP")
                unifiedorder_pub.setParameter("attach", attach_data)

                prepay_id = unifiedorder_pub.getPrepayId()
                data = unifiedorder_pub.getUndResult()

                app_order_pub = AppOrder_pub()
                app_order_pub.setParameter('prepayid', prepay_id)
                sign, nonce_str, timestamp, wx_package = app_order_pub.get_request_params(
                )

                result = {
                    'order_id': order.id,
                    'wechat_request': {
                        'prepay_id': prepay_id,
                        'sign': sign,
                        'appid': data['appid'],
                        'mch_id': data['mch_id'],
                        'nonce_str': nonce_str,
                        'package': wx_package,
                        'timestamp': timestamp,
                    }
                }
                return Response(result)
        except Exception, e:
            log.exception(e)
コード例 #5
0
    def get(self, request, *args, **kwargs):
        try:
            package_id = request.GET.get('package_id')
            order = VIPOrder.create_order(request.user, int(package_id))
            if order:
                order.pay_type = VIPOrder.PAY_TYPE_BY_ALIPAY_APP
                out_trade_no = create_trade_id(order.id)
                order.outtradeno = out_trade_no
                order.save()
                result = {'order_id': order.id}

                alipay_client_config = AlipayClientConfig()
                alipay_client_config.app_id = smart_str(
                    settings.ALIPAY_APP_INFO['basic_info']['APP_ID'])
                alipay_client_config.sign_type = smart_str(
                    settings.ALIPAY_APP_INFO['other_info']['SIGN_TYPE'])
                with open(
                        settings.ALIPAY_APP_INFO['basic_info']
                    ['APP_PRIVATE_KEY'], 'r') as fp:
                    alipay_client_config.app_private_key = fp.read()

                client = DefaultAlipayClient(
                    alipay_client_config=alipay_client_config)

                model = AlipayTradeWapPayModel()
                model.total_amount = smart_str(
                    str_to_specify_digits(str(order.price)))
                model.product_code = smart_str("QUICK_WAP_WAY")
                model.subject = smart_str(_(order.name))
                model.out_trade_no = smart_str(out_trade_no)
                # 返回页面时不使用缓存
                quit_url = settings.LMS_ROOT_URL + reverse(
                    "vip_alipay_h5_result")
                model.quit_url = smart_str(quit_url)
                model.passback_params = smart_str(settings.LMS_ROOT_URL +
                                                  reverse("vip_purchase"))

                request = AlipayTradeWapPayRequest(biz_model=model)
                request.notify_url = smart_str(
                    settings.ALIPAY_APP_INFO['other_info']['NOTIFY_URL'])
                result['alipay_request'] = client.sdk_execute(request)
                log.error(SERVER_URL + "?" + result['alipay_request'])
                data = {
                    'alipay_url': SERVER_URL + "?" + result['alipay_request'],
                    'order_id': order.id
                }
                return Response(xresult(data=data))
        except Exception, e:
            log.exception(e)
コード例 #6
0
 def get_pay_html(self, body, subject, total_fee, http_host, order_id):
     """
     get alipay html
     # 支付信息,订单号必须唯一
     """
     extra_common_param = settings.LMS_ROOT_URL + reverse("vip_purchase")
     total_fee = str_to_specify_digits(str(total_fee))
     trade_id = create_trade_id(order_id)
     pay_html = create_direct_pay_by_user(
         trade_id,
         body,
         subject,
         total_fee,
         http_host,
         extra_common_param=extra_common_param)
     return pay_html