Change to use django-we support WeChat OAuth2/Share relative api

Brightcells лет %!s(int64=7): %!d(string=назад)
Родитель
Сommit
37c5365a18
10 измененных файлов с 17 добавлено и 81 удалено
  1. 5 5
      api/urls.py
  2. 2 1
      pai2/settings.py
  3. 9 9
      pay/views.py
  4. 1 0
      requirements.txt
  5. 0 0
      wechat/__init__.py
  6. 0 4
      wechat/admin.py
  7. 0 0
      wechat/migrations/__init__.py
  8. 0 4
      wechat/models.py
  9. 0 4
      wechat/tests.py
  10. 0 54
      wechat/views.py

+ 5 - 5
api/urls.py

@@ -1,6 +1,7 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3 3
 from django.conf.urls import url
4
+from django_we import views as we_views
4 5
 
5 6
 from account import views as account_views
6 7
 from account import tourguide_views
@@ -15,7 +16,6 @@ from operation import views as op_views
15 16
 from pay import views as pay_views
16 17
 from photo import views as photo_views
17 18
 from server import server_views
18
-from wechat import views as wechat_views
19 19
 
20 20
 
21 21
 # 帐户相关
@@ -165,14 +165,14 @@ urlpatterns += [
165 165
 
166 166
 # 微信授权相关
167 167
 urlpatterns += [
168
-    url(r'^wx_oauth2$', wechat_views.wx_oauth2, name='wx_oauth2'),
169
-    url(r'^base_redirect$', wechat_views.base_redirect, name='base_redirect'),
170
-    url(r'^userinfo_redirect$', wechat_views.userinfo_redirect, name='userinfo_redirect'),
168
+    url(r'^wx_oauth2$', we_views.we_oauth2, name='we_oauth2'),
169
+    url(r'^base_redirect$', we_views.base_redirect, name='base_redirect'),
170
+    url(r'^userinfo_redirect$', we_views.userinfo_redirect, name='userinfo_redirect'),
171 171
 ]
172 172
 
173 173
 # 微信分享相关
174 174
 urlpatterns += [
175
-    url(r'^wx/jsapi_signature$', wechat_views.wx_jsapi_signature_api, name='wx_jsapi_signature_api'),  # jsapi_signature
175
+    url(r'^wx/jsapi_signature$', we_views.we_jsapi_signature_api, name='we_jsapi_signature_api'),  # jsapi_signature
176 176
 ]
177 177
 
178 178
 # 首页相关

+ 2 - 1
pai2/settings.py

@@ -42,8 +42,9 @@ INSTALLED_APPS = (
42 42
     'django.contrib.messages',
43 43
     'django.contrib.staticfiles',
44 44
     'rest_framework',
45
-    'django_rlog',
46 45
     'django_q',
46
+    'django_rlog',
47
+    'django_we',
47 48
     'api',
48 49
     'account',
49 50
     'box',

+ 9 - 9
pay/views.py

@@ -208,17 +208,17 @@ def wx_order_query_api(request):
208 208
     wxpay = WeChatPay(wxcfg.get('appID'), wxcfg.get('apiKey'), wxcfg.get('mchID'))
209 209
 
210 210
     # 订单查询
211
-    data = wxpay.order.query(transaction_id, order_id)
211
+    query_data = wxpay.order.query(transaction_id, order_id)
212 212
     # 签名校验
213
-    if not check_signature(data, wxcfg.get('apiKey')):
213
+    if not check_signature(query_data, wxcfg.get('apiKey')):
214 214
         return response(OrderStatusCode.SIGN_CHECK_FAIL)
215 215
 
216
-    order.notify_msg = data
217
-    order.transaction_id = data.get('transaction_id', '')
216
+    order.notify_msg = query_data
217
+    order.transaction_id = query_data.get('transaction_id', '')
218 218
     order.save()
219 219
 
220 220
     # 交易状态
221
-    trade_state = data.get('trade_state')
221
+    trade_state = query_data.get('trade_state')
222 222
     # 订单状态判断更新
223 223
     if trade_state == 'SUCCESS':  # 订单支付成功
224 224
         order_paid_success(order)
@@ -272,20 +272,20 @@ def wx_order_detail_api(request):
272 272
 @transaction.atomic
273 273
 def wx_notify_url_api(request):
274 274
     """ 支付异步通知回调地址 """
275
-    data, success = check_pay_notify(request.body, wx_configs=settings.WECHAT)
275
+    notify_data, success = check_pay_notify(request.body, wx_configs=settings.WECHAT)
276 276
     if not success:
277 277
         return HttpResponse(WXPAY_NOTIFY_FAIL)
278 278
 
279 279
     try:
280
-        order = OrderInfo.objects.select_for_update().get(order_id=data.get('out_trade_no', ''), status=True)
280
+        order = OrderInfo.objects.select_for_update().get(order_id=notify_data.get('out_trade_no', ''), status=True)
281 281
     except OrderInfo.DoesNotExist:
282 282
         return HttpResponse(WXPAY_NOTIFY_FAIL)
283 283
 
284 284
     order.notify_msg = request.body
285
-    order.transaction_id = data.get('transaction_id', '')
285
+    order.transaction_id = notify_data.get('transaction_id', '')
286 286
     order.save()
287 287
 
288
-    result_code = data.get('result_code', '')
288
+    result_code = notify_data.get('result_code', '')
289 289
     if result_code == 'SUCCESS':
290 290
         order_paid_success(order)
291 291
     else:

+ 1 - 0
requirements.txt

@@ -18,6 +18,7 @@ django-paginator2==1.0.3
18 18
 django-rlog==1.0.7
19 19
 django-shortuuidfield==0.1.3
20 20
 django-six==1.0.2
21
+django-we==1.0.1
21 22
 djangorestframework==3.6.3
22 23
 furl==1.0.0
23 24
 hiredis==0.2.0

+ 0 - 0
wechat/__init__.py


+ 0 - 4
wechat/admin.py

@@ -1,4 +0,0 @@
1
-from django.contrib import admin
2
-
3
-
4
-# Register your models here.

+ 0 - 0
wechat/migrations/__init__.py


+ 0 - 4
wechat/models.py

@@ -1,4 +0,0 @@
1
-from django.db import models
2
-
3
-
4
-# Create your models here.

+ 0 - 4
wechat/tests.py

@@ -1,4 +0,0 @@
1
-from django.test import TestCase
2
-
3
-
4
-# Create your tests here.

+ 0 - 54
wechat/views.py

@@ -1,54 +0,0 @@
1
-# -*- coding: utf-8 -*-
2
-
3
-from django.conf import settings
4
-from django.shortcuts import redirect
5
-from furl import furl
6
-from json_response import auto_response
7
-from pywe_jssdk import jsapi_signature_params
8
-from pywe_oauth import get_access_info, get_oauth_code_url, get_userinfo
9
-
10
-
11
-JSAPI = settings.WECHAT.get('JSAPI', {})
12
-
13
-
14
-def wx_oauth2(request):
15
-    scope = request.GET.get('scope', 'snsapi_userinfo')
16
-    redirect_url = request.GET.get('redirect_url', '')
17
-    default_url = request.GET.get('default_url', '')
18
-
19
-    if request.weixin:
20
-        redirect_uri = settings.WECHAT_USERINFO_REDIRECT_URI if scope == 'snsapi_userinfo' else settings.WECHAT_BASE_REDIRECT_URI
21
-        return redirect(get_oauth_code_url(JSAPI['appID'], redirect_uri, scope, redirect_url))
22
-
23
-    return redirect(default_url or redirect_url)
24
-
25
-
26
-def base_redirect(request):
27
-    code = request.GET.get('code', '')
28
-    state = request.GET.get('state', '')
29
-
30
-    access_info = get_access_info(JSAPI['appID'], JSAPI['appsecret'], code)
31
-    if 'errcode' in access_info:
32
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
33
-
34
-    return redirect(furl(state).add(access_info).url)
35
-
36
-
37
-def userinfo_redirect(request):
38
-    code = request.GET.get('code', '')
39
-    state = request.GET.get('state', '')
40
-
41
-    access_info = get_access_info(JSAPI['appID'], JSAPI['appsecret'], code)
42
-    if 'errcode' in access_info:
43
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
44
-
45
-    userinfo = get_userinfo(access_info.get('access_token', ''), access_info.get('openid', ''))
46
-    if 'openid' not in userinfo:
47
-        return redirect(settings.WECHAT_OAUTH2_RETRY_REDIRECT_URI.format(state))
48
-
49
-    return redirect(furl(state).add(userinfo).url)
50
-
51
-
52
-@auto_response
53
-def wx_jsapi_signature_api(request):
54
-    return jsapi_signature_params(JSAPI['appID'], JSAPI['appsecret'], request.GET.get('url', ''))