WeChat-Django는 WeChat 공개 플랫폼에 접근하는 Django 개발자에게 편리한 WeChat 및 WeChat 결제 기능 캡슐화와 기본 백엔드 관리 지원을 제공하는 것을 목표로 합니다.
공식 프로젝트 주소: https://github.com/Xavier-Lam/wechat-django
이 확장은 wechatpy를 기반으로 하며, 지원되는 최소 Django 버전은 1.11입니다. WeChat-Django는 미리보기 버전이므로 버그가 많을 수 있으며 API 및 데이터 구조가 변경될 수 있습니다. CHANGELOG를 주의 깊게 살펴보시기 바랍니다.
USE_TZ = True
설정하세요.이 시점에서 wechat_django를 쉽게 사용할 수 있습니다. 프로젝트에서 아직 구체적인 사용 문서를 제공하지 않았습니다. 맞춤 요구사항이 필요한 경우 먼저 코드를 읽어보세요.
최신 기능을 사용하거나 코드를 직접 편집하려면 이 프로젝트를 복제하고 pip install -e를 사용하여 Django 프로젝트 디렉터리에 직접 설치할 수 있습니다.
일반적으로 말하면 기본 구성으로 충분합니다.
매개변수 이름 | 기본값 | 설명하다 |
---|---|---|
WECHAT_SITE_HOST | 없음 | WeChat 콜백을 수신하는 데 사용되는 기본 도메인 이름 |
WECHAT_SITE_HTTPS | 진실 | 도메인 이름이 https인지 WeChat 콜백 수신 |
WECHAT_PATCHADMINSITE | 진실 | django의 기본 adminsite를 wechat_django의 기본 adminsite로 교체할지 여부, 기본 교체 |
WECHAT_SESSIONSTORAGE | "django.core.cache.cache" | WeChat accesstoken과 같은 데이터를 저장하는 데 사용되는 wechatpy.session.SessionStorage 개체 또는 wechat_django.models.WeChatApp 개체를 수신하고 해당 인스턴스를 생성하는 팩토리 메서드 |
WECHAT_MESSAGETIMEOFFSET | 180 | WeChat이 메시지를 요청할 때 타임스탬프가 서버 시간과 이 값 이상 차이가 나는 요청은 삭제됩니다. |
WECHAT_MESSAGENOREPEATNONCE | 진실 | 기본적으로 WeChat 메시지 재생 방지를 확인할지 여부 |
나무꾼 | 설명하다 |
---|---|
wechat.admin.{앱 이름} | 관리자 예외 로그 가장 낮은 수준의 경고 |
wechat.api.{앱 이름} | API 로그 최하위 수준 디버그 |
wechat.handler.{앱 이름} | 메시지 처리 로그 최하위 수준 디버깅 |
wechat.oauth.{앱 이름} | 웹페이지 인증 예외 로그의 가장 낮은 수준은 경고입니다. |
wechat.site.{앱 이름} | 사이트 보기 예외 로그(예: 재료 프록시) 최저 수준 경고 |
웹 페이지 승인은 wechat_django.oauth.wechat_auth
데코레이터를 통해 수행할 수 있습니다. 승인 후 요청은 wechat이라는 이름의 wechat_django.oauth.WeChatOAuthInfo
개체와 함께 첨부됩니다. wechat_django.models.WeChatUser
인스턴스는 request.wechat.user를 통해 얻을 수 있습니다. .request.wechat.app wechat_django.models.WeChatApp
인스턴스를 가져옵니다. 다음은 기본 예입니다.
from wechat_django import wechat_auth
@wechat_auth("your_app_name")
def your_view(request, *args, **kwargs):
""":type request: wechat_django.requests.WeChatOAuthRequest"""
user = request.wechat.user
기본 리디렉션 동작이 만족스럽지 않은 경우 응답을 사용자 정의할 수 있습니다. 특정 매개변수 설명은 wechat_django.oauth.wechat_auth
데코레이터의 문서 문자열을 참조하세요.
클래스 기반 보기의 경우 wechat_django.oauth.WeChatOAuthView
클래스를 상속할 수 있습니다. 자세한 내용은 코드를 참조하세요.
wechat_django.models.WeChatApp.auth
통해 승인하고, 클라이언트에서 코드를 입력하고, 사용자 개체와 원래 응답을 출력합니다. 이 방법은 사용자의 openid 및 Unionid만 가져올 수 있습니다.
from wechat_django.models import WeChatApp
app = WeChatApp.objects.get_by_name("your app name")
user, data = app.auth(code)
인증 후 획득한 session_key의 경우 프레임워크는 데이터베이스에 유지되며, 그런 다음 wechat_django.models.WeChatUser.session
호출하여 관련 작업을 수행할 수 있습니다.
인증 방법은 웹 페이지 인증에도 적용 가능합니다. 두 번째 매개변수는 웹 페이지 인증 범위를 채웁니다.
이미 미니 프로그램을 승인했고 session_key가 만료되지 않은 사용자의 경우 wechat_django.models.Session.decrypt_message
사용하여 클라이언트에서 전송된 민감한 데이터를 해독할 수 있습니다.
encrypted_data = ""
iv = ""
try:
data = user.session.decrypt_message(
encrypted_data, iv)
except ValueError:
pass # 无法正确解密数据 session_key可能过期了
wechat_django.models.Session.validate_message
사용하여 클라이언트에서 보낸 데이터를 확인할 수도 있습니다.
from wechatpy.exceptions import InvalidSignatureException
signature = ""
raw_data = ""
try:
data = user.session.validate_message(raw_data, signature)
except InvalidSignatureException:
pass # 签名错误 session_key可能过期了
클라이언트는 wx.getUserInfo
호출하여 rawData 및 서명을 백엔드에 전달합니다. 백엔드는 wechat_django.models.Session.validate_message
및 wechat_django.models.User.update
from django.http.response import HttpResponse
from wechatpy.exceptions import InvalidSignatureException
signature = request.POST["signature"]
raw_data = request.POST["rawData"]
try:
data = user.session.validate_message(raw_data, signature)
except InvalidSignatureException:
return HttpResponse(status=401)
업데이트 방법을 사용하여 사용자 데이터 업데이트
user.update(data)
from wechat_django.models import WeChatApp
app = WeChatApp.get_by_name("your app name")
data = app.client.user.get_followers()
클라이언트 사용 방법에 대한 구체적인 지침은 wechatpy 설명서를 참조하세요.
백그라운드에서 사용자 정의 응답을 구성하고 사용자 정의 응답 처리 코드의 경로를 입력하십시오. 코드는 wechat_django.handler.message_handler
해당 메소드는 wechat_django.models.WeChatMessageInfo
객체를 수신하고 문자열 또는 wechatpy.replies.BaseReply
객체.
from wechat_django import message_handler
@message_handler
def custom_business(message):
"""
:type message: wechat_django.models.WeChatMessageInfo
"""
user = message.user
msg = message.message
text = "hello, {0}! we received a {1} message.".format(
user, msg.type)
return TextReply(content=text.encode())
위챗 결제를 이용하시려면 INSTALLED_APP에서 wechat_django
뒤에 wechat_django.pay
추가하셔야 합니다.
from wechat_django.models import WeChatApp
app = WeChatApp.objects.get_by_name("your app name")
order = app.pay.create_order(
user="user-instance", body="body", total_fee=1,
out_trade_no="***debug***20190613001") # 也可以用openid="openid"代替user参数
prepay = order.prepay(request)
jsapi 매개변수를 프런트엔드에 전달
jsapi_params = order.jsapi_params(prepay["prepay_id"])
주문 상태를 적극적으로 확인하세요.
order.sync()
주문이 업데이트되면 wechat_django.pay.signals.order_updated
신호가 발생합니다. 발신자는 wechat_django.utils.func.Static("{appname}.{payname}")
신호에 대해 4가지 변수를 제공합니다.
변하기 쉬운 | 설명하다 |
---|---|
결과 | 주문 결과 ( wechat_django.pay.models.UnifiedOrderResult ) |
주문하다 | 업데이트된 주문( wechat_django.pay.models.UnifiedOrder ) |
상태 | 주문 상태( wechat_django.pay.models.UnifiedOrderResult.State ) |
붙이다 | 결과에 첨부된 정보(주문 생성 시 WeChat 서버로 전달된 첨부) |
사용예
from django.dispatch import receiver
from wechat_django.pay import signals
@receiver(signals.order_updated)
def order_updated(result, order, state, attach):
if state == UnifiedOrderResult.State.SUCCESS:
pass
주의! 모든 활성 통화, WeChat 알림 또는 백그라운드 재실행에 대해 신호가 전송됩니다. 주문 성공 신호 로직이 한 번만 실행되는지 확인하세요.
이 프로젝트의 클래스 기반 OAuth 인증은 django-rest-framework와 호환됩니다.
wechat_django.oauth.WeChatOAuthViewMixin
을 상속하는 뷰 클래스를 생성합니다.appname
속성을 정의합니다.permission_classes
정의합니다(액세스하기 전에 리소스를 승인해야 하는 경우 허가_classes에 wechat_django.oauth.WeChatAuthenticated
추가하세요).handle_exception
메서드에서 rest_framework.exceptions.NotAuthenticated
캡처한 후 직접 처리하세요.예제 프로젝트의 Rest.py 파일을 볼 수 있습니다.
관리 배경 활용 소개 문서 보기
본 프로젝트의 샘플 폴더를 참고해주세요
자비에-램@NetDragon