위챗 공식 계정 개발 Django- 웹 페이지 인증
6282 단어 위챗 공식계정 개발django
기초적인 위챗 공식번호 개발, 웹 페이지 권한 수여, JSSDK, 이미지 처리는 가장 중요한 세 부분일 것이다
근본적으로 문서 개발대로 기술 함량이 높지 않다.
(Django=많은 권한 제어 모듈이 완성되어 비교적 효율적이다)
시작하기 전에 내부 네트워크가 뚫린 각종 도구를 강력히 추천합니다. 공중번호를 실시간으로 디버깅할 수 있습니다
스스로 구축하는 것을 추천합니다. 도메인 이름을 사용자 정의할 수 있고 전송도 안심할 수 있습니다.
https://github.com/inconshreveable/ngrok
https://github.com/fatedier/frp
모든 것을 수동으로 이루고 싶지 않은 것은 참고할 수 있다. WeRoBot은 처음부터 이걸로 힘을 좀 덜려고 했지만 일부 인터페이스가 실현되지 않고 고쳐져서 마지막에...무심코'작은 봉인'을 실현했지만 기초 인터페이스만 사용하면 프레임을 직접 사용하는 게 편해요.
웹 페이지 권한 부여, 공식 문서를 직접 베끼기:
# xgc.wechat.py
token=os.environ.get('TOKEN') #
app_id=os.environ.get('APP_ID')
app_secret=os.environ.get('APP_SECRET')
redirect_url = os.environ.get('REDIRECT_URL')
state = os.environ.get('STATE')
#
web_get_code = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&state=%s&scope='%(app_id,redirect_url,state)
web_get_fan_info = 'https://api.weixin.qq.com/sns/userinfo?access_token='
web_check_access_token = 'https://api.weixin.qq.com/sns/auth?access_token='
web_get_access_token = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&grant_type=authorization_code&code='%(app_id,app_secret)
# views.py
class web_authorization(View):
def get(self, request):
from xgc.wechat import web_get_code, web_get_fan_info,web_get_access_token,web_check_access_token
code = request.GET.get("code", "")
if not code:
return HttpResponse(" ")
requests_web_get_access_token_result = requests.get(web_get_access_token+code).json()
if 'errmsg' in requests_web_get_access_token_result.keys():
return HttpResponseRedirect(web_get_code+'snsapi_base#wechat_redirect')
if cache.has_key('web_access_token'):
web_access_token = cache.get('web_access_token')
else:
web_access_token = requests_web_get_access_token_result['access_token']
cache.set('web_access_token',web_access_token,110*60) #
fan_openid = requests_web_get_access_token_result['openid']
# , ,
# check_access_token = requests.get(web_check_access_token+'%s&openid=%s'%(web_access_token,fan_openid)).json()
# if check_access_token['errcode']!=0:
# return HttpResponseRedirect(web_get_code+'snsapi_base#wechat_redirect')
scope = requests_web_get_access_token_result["scope"]
if scope == "snsapi_userinfo":
fan_info = requests.get(web_get_fan_info+'%s&openid=%s&lang=zh_CN' % (web_access_token, fan_openid))
fan_info.encoding = 'utf-8'
fan_info = fan_info.json()
FansProfile.create_fan(fan_info)
check_openid = FansProfile.objects.filter(openid=fan_openid).first()
if not check_openid:
return render(request, 'register.html', {'url': web_get_code+'snsapi_userinfo#wechat_redirect','header':' ','text':' , '})
response = HttpResponseRedirect('index')
response.set_cookie('fanid',check_openid.id,3600)
return response
code
여기 제가 직접 공중번호 메뉴 부분에 안내 URL을 설치했어요.
여기 베이스 인증으로 설정된 것은 코드에 인증 부분을 추가했기 때문입니다
사용자 첫 번째 인증 후 우리는 사용자의 기본 정보를 저장할 수 있으며 다음에user info 인증을 할 필요가 없습니다
그리고 자동 권한 수여 사용자 체험도 좋고요.
{
"type": "view",
"name": " ",
"url": wechat_get_code+'snsapi_base#wechat_redirect',
"key": "test_4"
}
access_token
문서에서 말한 바와 같이 코드를 얻은 후에 우리가 필요로 하는access 로 직접 교환을 요청합니다token
if cache.has_key('web_access_token'):
web_access_token = cache.get('web_access_token')
else:
web_access_token = requests_web_get_access_token_result['access_token']
cache.set('web_access_token',web_access_token,110*60)
코드에서 캐시 정책을 사용했습니다. 위챗에서 많은 Token은 요청 횟수 제한이 있고 실효 기간이 있습니다. 캐시 Token은 현명한 선택입니다. 구체적인 캐시 아래에 언급될 것입니다.
refresh_token
access 바꾸기token과 동시에 위챗은refreshtoken은access 에 사용token의 리셋은 제 코드에서 사용하지 않고 직접 재권한을 부여했습니다
snsapi_userinfo
첫 번째 권한 수여 때 우리는 데이터베이스에 이 사용자의 인증 기록이 있는지 검사했다
없으면 사용자 info 권한 부여를 유도합니다
그중에서 주의해야 할 것은 여기 위챗 서버에서 되돌아오는 데이터가 데이터 인코딩 유형을 가리키지 않아 직접 읽으면 난코드가 발생할 수 있다는 점입니다. 저희는response 인코딩을 지정하여 디코딩을 할 수 있습니다. 구체적으로 설명해서 이 댓글을 추천합니다.https://www.v2ex.com/t/172276
if scope == "snsapi_userinfo":
fan_info = requests.get(web_get_fan_info+'%s&openid=%s&lang=zh_CN' % (web_access_token, fan_openid))
fan_info.encoding = 'utf-8'
fan_info = fan_info.json()
FansProfile.create_fan(fan_info)
PS:set_쿠키는 제가 팬의 모델을 계승하지 않았기 때문에 Django의user모델은 자신의auth모듈을 사용할 수 없습니다. 나중에 폼을 제출하고 사진을 올릴 때 누가 올렸는지 알아야 하기 때문에 사용자 id를 쿠키에 기록하는 방식을 사용합니다.
캐시 정보
이곳은 Redis 방식을 사용합니다. 우선 Django의 settings.py 도입 캐시 설정
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache', #
'LOCATION': '127.0.0.1:6379',
'TIMEOUT': 600,
'OPTIONS': {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"IGNORE_EXCEPTIONS": True,
}
}
}
그리고 우리는 from django를 도입할 수 있다.core.cache import cache 모듈
아래와 같은 몇 가지 기본적인 조작을 진행하다
# web_access_token
# 110*60s, 110min
cache.set('web_access_token',web_access_token,110*60)
공식 문서
os.environ.get('')
루트 디렉터리를 가져옵니다.env 파일의 다양한 설정
부분비밀token,appid 단독 설정
이로써 가상 환경 추천 도구인 Pipenv를 만듭니다. 일반적인 가상 환경 추천 도구가 아닌 Pipenv 등 ~ 기본 지원을 만듭니다.env 가져오기
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
위챗 페이지 권한 부여 코드가 여러 번 리셋을 요청하는 구덩이이전 프로젝트에서 위챗 권한을 부여받아야 했는데 저도 처음 사용했습니다. 위챗 개발 문서를 보고 썼는데 구덩이에 빠졌습니다. 권한 부여 페이지에서 처음 쓰기 시작한 위챗 권한 부여 링크: https://open.we...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.