From 7a0c8bfce3adb7e31212a55cabfaab47679f8f1f Mon Sep 17 00:00:00 2001 From: youngS Date: Mon, 19 Apr 2021 10:32:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=A4=E8=AF=81=E4=B9=8B=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=85=8D=E8=B4=B9=E4=B8=8B=E8=BD=BD=E6=AC=A1=E6=95=B0=E4=B8=8D?= =?UTF-8?q?=E5=8F=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fir_client/src/assets/pay/order-weixin.png | Bin 0 -> 8987 bytes fir_client/src/assets/pay/pay-scan.png | Bin 0 -> 326 bytes fir_client/src/assets/pay/pay_alipay.png | Bin 0 -> 5207 bytes fir_client/src/assets/pay/pay_selected.png | Bin 0 -> 868 bytes fir_client/src/assets/pay/pay_weixin.png | Bin 0 -> 6025 bytes fir_client/src/components/apps/FirApps.vue | 43 ++++++++---------- .../src/components/user/FirUserOrders.vue | 38 ++++++++++------ fir_ser/api/utils/pay/ali.py | 1 - fir_ser/api/utils/serializer.py | 4 +- fir_ser/api/utils/storage/caches.py | 9 +++- fir_ser/api/views/order.py | 5 -- 11 files changed, 51 insertions(+), 49 deletions(-) create mode 100644 fir_client/src/assets/pay/order-weixin.png create mode 100644 fir_client/src/assets/pay/pay-scan.png create mode 100644 fir_client/src/assets/pay/pay_alipay.png create mode 100644 fir_client/src/assets/pay/pay_selected.png create mode 100644 fir_client/src/assets/pay/pay_weixin.png diff --git a/fir_client/src/assets/pay/order-weixin.png b/fir_client/src/assets/pay/order-weixin.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfca13554646141d862af42508d234f55f515f5 GIT binary patch literal 8987 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 BPo4k( literal 0 HcmV?d00001 diff --git a/fir_client/src/assets/pay/pay-scan.png b/fir_client/src/assets/pay/pay-scan.png new file mode 100644 index 0000000000000000000000000000000000000000..f73f50c42e84d7da127c43ebe40ab19c204eee7b GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg1|*MGNWTVBjKx9jP7LeL$-D%z89ZGaLo!(3 z&br9kY{26(d(~?LhS(LxrHlA3G_Fwosyr#!b;g6JYoEgnEG+LwPKcP|`^M;C*Nusp zX%BbEF$x+^Yf)NtDamX3g|%nbN!q9U$y;aJ_I+-*&Zj@YN3U%6J|6Zp!Js`M&U(l8 z5>@$QgQ@@k literal 0 HcmV?d00001 diff --git a/fir_client/src/assets/pay/pay_alipay.png b/fir_client/src/assets/pay/pay_alipay.png new file mode 100644 index 0000000000000000000000000000000000000000..c510f7509af657af61c99e671cf4fd8e02ec327c GIT binary patch literal 5207 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 DO;^iV literal 0 HcmV?d00001 diff --git a/fir_client/src/components/apps/FirApps.vue b/fir_client/src/components/apps/FirApps.vue index f728561..c206d13 100644 --- a/fir_client/src/components/apps/FirApps.vue +++ b/fir_client/src/components/apps/FirApps.vue @@ -28,12 +28,10 @@
此套餐 - + -
@@ -44,9 +42,12 @@ :key="pay.name"> xxxxxxxxxxxxxx - - - + + + @@ -543,6 +544,11 @@ show_buy_download_times: false, data_package_prices: [], buy_button_disable: true, + pay_image: { + 'wx': require('@/assets/pay/pay_weixin.png'), + 'ali': require('@/assets/pay/pay_alipay.png'), + 'selected': require('@/assets/pay/pay_selected.png'), + } } }, methods: { show_package_prices() { @@ -565,8 +571,12 @@ this.buy_button_disable = true; my_order(res => { if (res.code === 1000) { - this.$message.success("下订单成功,正在跳转支付页"); - this.$router.push({name: 'FirUserOrders', params: {out_trade_no: res.data.out_trade_no}}) + if (res.data && res.data.url) { + this.$message.success("下订单成功,正在跳转支付页"); + this.$router.push({name: 'FirUserOrders', params: {out_trade_no: res.data.out_trade_no}}) + } else { + this.$message.error("下订单异常,请联系管理员"); + } } else { this.$message.error("异常" + res.msg); this.buy_button_disable = false; @@ -1064,12 +1074,6 @@ } - /*/deep/ .el-dialog__body {*/ - /* background-image: url("@/assets/b6.png");*/ - /* border: 0;*/ - /*}*/ - - .page-apps .card.app .action a, .page-apps .card.app .appname, .page-apps .card.app table tr td, .upload-modal .state-form .release-body .input-addon { font-family: 'Open Sans', sans-serif } @@ -1509,12 +1513,7 @@ z-index: 999; } - .weixin { - background-image: url(https://img.jiguang.cn/app-portal/assets/img/account/pay_weixin.png); - } - .pay-current { - background: url(https://img.jiguang.cn/app-portal/assets/img/account/pay_selected.png) right bottom/100% no-repeat; width: 18px; height: 19px; position: absolute; @@ -1531,8 +1530,4 @@ left: 15px; } - .alipay { - background-image: url(https://img.jiguang.cn/app-portal/assets/img/account/pay_alipay.png); - } - diff --git a/fir_client/src/components/user/FirUserOrders.vue b/fir_client/src/components/user/FirUserOrders.vue index 57addff..cd131ce 100644 --- a/fir_client/src/components/user/FirUserOrders.vue +++ b/fir_client/src/components/user/FirUserOrders.vue @@ -23,7 +23,7 @@
-
+
-
请使用微信扫码支付
+
请使用微信扫码支付

支付完成之后,请刷新该页面,确认支付状态

@@ -255,6 +256,10 @@ return { wx_pay: false, pay_code_url: '', + pay_image: { + 'scan': require('@/assets/pay/pay-scan.png'), + 'order_wx': require('@/assets/pay/order-weixin.png'), + }, qrinfo: { logoScale: 0.3, logoCornerRadius: 12, @@ -293,19 +298,24 @@ my_order(res => { if (res.code === 1000) { let data = res.data; - if (data && data.type === 'WX') { - this.pay_code_url = data.url; - this.wx_pay = true; - this.$message.success("请用微信扫描支付"); - } else if (data && data.type === 'ALI') { - let pay_url = data.url; - if (pay_url && pay_url.length > 10) { - this.$message.success("正在跳转支付宝支付平台"); - window.location.href = pay_url - // window.open(pay_url, '_blank', ''); + if (data && data.url) { + + if (data && data.type === 'WX') { + this.pay_code_url = data.url; + this.wx_pay = true; + this.$message.success("请用微信扫描支付"); + } else if (data && data.type === 'ALI') { + let pay_url = data.url; + if (pay_url && pay_url.length > 10) { + this.$message.success("正在跳转支付宝支付平台"); + window.location.href = pay_url + // window.open(pay_url, '_blank', ''); + } + } else { + this.$message.error("支付获取失败 " + res.msg) } } else { - this.$message.error("支付获取失败 " + res.msg) + this.$message.error("下订单异常,请联系管理员"); } } else { this.$message.error("失败了 " + res.msg) @@ -444,7 +454,6 @@ .icon-weixin { width: 137px; height: 35px; - background: url(https://img.jiguang.cn/app-portal/assets/img/account/order-weixin.png) 0 0/100%; margin-left: 50px; } @@ -465,7 +474,6 @@ .icon { width: 26px; height: 26px; - background-image: url(https://img.jiguang.cn/app-portal/assets/img/account/pay-scan.png); background-size: 100%; display: inline-block; margin-right: 11px; diff --git a/fir_ser/api/utils/pay/ali.py b/fir_ser/api/utils/pay/ali.py index c4bc9f6..fa419b5 100644 --- a/fir_ser/api/utils/pay/ali.py +++ b/fir_ser/api/utils/pay/ali.py @@ -75,7 +75,6 @@ class Alipay(object): def update_order_status(self, out_trade_no): data = self.alipay.api_alipay_trade_query(out_trade_no=out_trade_no) - # (0, '交易成功'), (1, '待支付'), (2, '订单已创建'), (3, '退费申请中'), (4, '已退费'), (5, '主动取消'), (6, '超时取消') code = data.get("code", '') logger.info("out_trade_no: %s info:%s" % (out_trade_no, data)) if code == '10000': diff --git a/fir_ser/api/utils/serializer.py b/fir_ser/api/utils/serializer.py index 5ceb38e..cec12cd 100644 --- a/fir_ser/api/utils/serializer.py +++ b/fir_ser/api/utils/serializer.py @@ -5,7 +5,7 @@ from api.utils.TokenManager import DownloadToken from api.utils.app.supersignutils import get_redirect_server_domain from api.utils.storage.storage import Storage from api.utils.utils import get_developer_udided, get_choices_dict -from api.utils.storage.caches import get_user_free_download_times +from api.utils.storage.caches import get_user_free_download_times, get_user_cert_auth_status import os, json, logging logger = logging.getLogger(__file__) @@ -64,7 +64,7 @@ class UserInfoSerializer(serializers.ModelSerializer): free_download_times = serializers.SerializerMethodField() def get_free_download_times(self, obj): - return get_user_free_download_times(obj.id) + return get_user_free_download_times(obj.id, auth_status=get_user_cert_auth_status(obj.id)) certification = serializers.SerializerMethodField() diff --git a/fir_ser/api/utils/storage/caches.py b/fir_ser/api/utils/storage/caches.py index 5dbdee3..0d65e52 100644 --- a/fir_ser/api/utils/storage/caches.py +++ b/fir_ser/api/utils/storage/caches.py @@ -378,12 +378,17 @@ def add_user_download_times(user_id, download_times=0): return False -def check_user_has_all_download_times(app_obj): - user_id = app_obj.user_id_id +def get_user_cert_auth_status(user_id): user_cert_obj = UserCertificationInfo.objects.filter(user_id=user_id).first() auth_status = False if user_cert_obj and user_cert_obj.status == 1: auth_status = True + return auth_status + + +def check_user_has_all_download_times(app_obj): + user_id = app_obj.user_id_id + auth_status = get_user_cert_auth_status(user_id) return get_user_free_download_times(user_id, auth_status=auth_status) > 0 or check_user_can_download(user_id) diff --git a/fir_ser/api/views/order.py b/fir_ser/api/views/order.py index cd7ab55..590c7c5 100644 --- a/fir_ser/api/views/order.py +++ b/fir_ser/api/views/order.py @@ -140,16 +140,11 @@ class PriceView(APIView): class PaySuccess(APIView): - # authentication_classes = [ExpiringTokenAuthentication] def get(self, request): - alipay = Alipay() - # alipay.update_order_status('1202141610723105226256209') print(request.META) return Response(111) - # return HttpResponseRedirect(PAY_SUCCESS_URL) - def post(self, request, name): pay_obj = get_pay_obj_form_name(name) msg = 'failure'