python 微信开发入门篇JS SDK 含微信支付(二)

本节完成微信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.产品中心-->开发配置  设置支付授权目录

    python 微信开发入门篇JS SDK 含微信支付(二)_第1张图片

    

    3.产品中心-->APPID授权管理 

    

 

 

支付效果:

python 微信开发入门篇JS SDK 含微信支付(二)_第2张图片

  4.案例源码

   案例目录结构如下

    

    源码部分

路由源码 urls.py

复制代码

from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    # 微信认证文件建议使用nginx配置
    path('MP_verify_b1reLtO1xRzEjqxJ.txt', views.wechatauth),
    # 微信登录页面userinfo
    path('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 time

from 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_url
            print(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_info
            else:
                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-SDK Demo
  
    


判断当前客户端是否支持指定JS接口 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 获取“分享给朋友”按钮点击状态及自定义分享内容接口 获取“分享到QQ”按钮点击状态及自定义分享内容接口 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 获取“分享到QZone”按钮点击状态及自定义分享内容接口 拍照或从手机相册中选图接口 预览图片接口 上传图片接口 下载图片接口 开始录音接口 停止录音接口 播放语音接口 暂停播放接口 停止播放接口 上传语音接口 下载语音接口 识别音频并返回识别结果接口 获取网络状态接口 使用微信内置地图查看位置接口 获取地理位置接口 隐藏右上角菜单接口 显示右上角菜单接口 关闭当前网页窗口接口 批量隐藏功能按钮接口 批量显示功能按钮接口 隐藏所有非基础按钮接口 显示所有功能按钮接口 调起微信扫一扫接口 跳转微信商品页接口 批量添加卡券接口 调起适用于门店的卡券列表并获取用户选择列表 查看微信卡包中的卡券接口 发起一个微信支付请求

复制代码

你可能感兴趣的:(python 微信开发入门篇JS SDK 含微信支付(二))