框架使用Django
安装库:Django、djangorestframework、requests、xmltodict
获取openid:
什么是openid:小程序的唯一标识符,识别用户身份的关键
目前小程序的线上版本是不能在小程序端放置 “secret” 的,需要在后台解析获取openid
1.小程序端允许获取用户信息后,调用wx.login()方法获取code(成功后获取后端返回的openid,可在app中设置一个全局变量存储openid,代码部分就不粘了)
// 页面比较多的情况将this赋给that
const that = this;
wx.login({
success: (res) => {
console.log('loginCode:',res.code);
this.request(
"post",
url, // 路由地址
{"code": res.code},
header,
5000,
() => {}, //成功后的处理
() => {}, //失败后的处理
(res)=>{},
that
);
},
});
2.后端实现
from django.http import JsonResponse
from rest_framework.views import APIView
import requests
# 微信登录获取openid
class OpenidGet(APIView):
def post(self, request):
code = request.POST.get('data')
# appi与secret,可以将其存入数据库中获取
appid = '***'
secret = '***'
grant_type = 'authorization_code'
url = f'https://api.weixin.qq.com/sns/jscode2session?appid={appid}' \
f'&secret={secret}&js_code={code}&grant_type={grant_type}'
try:
res = requests.get(url).json()
openid = res['openid']
except:
return JsonResponse({'code': 400, 'msg': ''})
return JsonResponse({'code': 200, 'openid': openid})
实现微信支付:
1.支付流程(代码端流程):小程序端发起支付-->传递订单信息及openid调用后台支付接口-->订单发起后不管支付与否将订单信息存入数据库,订单状态设置为未支付