作者:mobiledu2502912527 | 来源:互联网 | 2023-02-07 13:35
本节完成微信jssdk微信支付调用,项目基础部分请参照入门篇第一章:https:www.cnblogs.comwangcongxingp11546780.html1.微信服务号设置
本节完成微信js sdk + 微信支付调用,项目基础部分请参照入门篇第一章:https://www.cnblogs.com/wangcongxing/p/11546780.html
1.微信服务号设置
登录服务号后台设置如下:
1.登录地址:https://mp.weixin.qq.com/
2.设置-->公众号设置-->功能设置
2.微信商户后台设置
登录微信支付平台设置如下:
1.登录地址(因为需要安装exe插件, 设置浏览为兼容模式 建议使用QQ浏览器):https://pay.weixin.qq.com
2.账户中心-->账户设置-->API安全
3.产品中心-->开发配置 设置支付授权目录
3.产品中心-->APPID授权管理
支付效果:
4.案例源码
案例目录结构如下
源码部分
路由源码 urls.py
from django.contrib import admin
from django.urls import path
from app import viewsurlpatterns = [path('admin/', admin.site.urls),# 微信认证文件建议使用nginx配置path('MP_verify_b1reLtO1xRzEjqxJ.txt', views.wechatauth),# 微信登录页面userinfopath('userinfo', views.userinfo),# 微信JS SDK 接口调用path('wxjssdk/', views.wxjssdk),path('get_signature', views.jsapi_signature),path('log', views.log),
]
视图源码 views.py
from wechatpy.oauth import WeChatOAuth
from django.shortcuts import render, redirect
from django.http import JsonResponse, HttpResponse, HttpResponseRedirect
import timefrom django.conf import settings
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
import uuid
from wechatpy import WeChatClient
import os
import json
from wechatpy import WeChatPay
from wechatpy.pay import dict_to_xml# Create your views here.# 公众号id
AppID = "AppID "
# 公众号AppSecret
AppSecret = "AppSecret"# 商户id
MCH_ID = '商户号'
# 商户API秘钥
API_KEY = 'API KET'
# 接收微信支付异步通知回调地址
notify_url = "http://i157422s94.iok.la/wxjssdk/"# 微信认证文件,建议通过nginx配置
def wechatauth(request):return HttpResponse("b1reLtO1xRzEjqxJ")# 定义授权装饰器def getWeChatOAuth(redirect_url):return WeChatOAuth(AppID, AppSecret, redirect_url, 'snsapi_userinfo')def oauth(method):def warpper(request):if request.session.get('user_info', None) is None:code = request.GET.get('code', None)wechat_oauth = getWeChatOAuth(request.get_raw_uri())url = wechat_oauth.authorize_urlprint(url)if code:try:wechat_oauth.fetch_access_token(code)user_info = wechat_oauth.get_user_info()print(user_info)except Exception as e:print(str(e))# 这里需要处理请求里包含的 code 无效的情况# abort(403)else:# 建议存储在用户表request.session['user_info'] = user_infoelse:return redirect(url)return method(request)return warpper# 获取用户信息UserInfo@oauth
def userinfo(request):user_info = request.session.get('user_info')return render(request, 'userinfo.html', {"user_info": user_info})# 微信JS SDK调用
@oauth
def wxjssdk(request):user_info = request.session.get('user_info')trade_type = "JSAPI"body = "商品描述"total_fee = "100"notify_url = "http://i157422s94.iok.la/notify_url/"user_id = user_info["openid"]wechatPay = WeChatPay(appid=AppID,api_key=API_KEY,mch_id=MCH_ID,)order = wechatPay.order.create(trade_type, body, total_fee, notify_url, user_id=user_id)wxpay_params = wechatPay.jsapi.get_jsapi_params(order['prepay_id'])print(wxpay_params)return render(request, 'index.html', {"wxpay_params": wxpay_params})@csrf_exempt
def jsapi_signature(request):nOncestr= uuid.uuid4()timestamp = int(time.time())url = request.POST['url']client = WeChatClient(AppID, AppSecret)ticket_respOnse= client.jsapi.get_ticket()signature = client.jsapi.get_jsapi_signature(noncestr,ticket_response['ticket'],timestamp,url)ret_dict = {'noncestr': noncestr,'timestamp': timestamp,'url': url,'signature': signature,}return JsonResponse(ret_dict)def log(request):print('Hello World!')return JsonResponse({'status': 'ok',})
templates-->index.html 源码
- 基础接口
- 分享接口
- 图像接口
- 音频接口
- 智能接口
- 设备信息接口
- 地理位置接口
- 界面操作接口
- 微信扫一扫接口
- 微信小店接口
- 微信卡券接口
- 微信支付接口
判断当前客户端是否支持指定JS接口获取“分享到朋友圈”按钮点击状态及自定义分享内容接口获取“分享给朋友”按钮点击状态及自定义分享内容接口获取“分享到QQ”按钮点击状态及自定义分享内容接口获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口获取“分享到QZone”按钮点击状态及自定义分享内容接口拍照或从手机相册中选图接口预览图片接口上传图片接口下载图片接口开始录音接口停止录音接口播放语音接口暂停播放接口停止播放接口上传语音接口下载语音接口识别音频并返回识别结果接口获取网络状态接口使用微信内置地图查看位置接口获取地理位置接口隐藏右上角菜单接口显示右上角菜单接口关闭当前网页窗口接口批量隐藏功能按钮接口批量显示功能按钮接口隐藏所有非基础按钮接口显示所有功能按钮接口调起微信扫一扫接口跳转微信商品页接口批量添加卡券接口调起适用于门店的卡券列表并获取用户选择列表查看微信卡包中的卡券接口发起一个微信支付请求