小程序码的生成与获取码中的scene

前端生成码

javascript 复制代码
request('GET', 'Spread/GetProgramCode', {
          appId: wx.getAccountInfoSync().miniProgram.appId,
          appSecret: '76fcc9af10b30bc662eedb0eadec3908',
          scene: '&cid=0&tp=1'//tp=1表示是推荐奖励 cid是优惠券id
        })
          .then(res => {
            res = res.data
            if (res.statusCode == 200) {
                 this.setData({visible:true,imagecode:getApp().globalData.url+res.data});
            } else{
              wx.showToast({ title: res.data, icon: 'error' });
              console.log(res.data);
            } 
          });

后端生成码

cs 复制代码
[HttpGet, Route("GetProgramCode")]
public object GetProgramCode(string appId, string appSecret, string scene)
{
    try
    {
        string dic = AppDomain.CurrentDomain.BaseDirectory;
        string rootPath =dic+ "UpLoadFiles\\" + DateTime.Now.ToString("yyyyMMdd");
        string fileName = DateTime.Now.ToString("yyyyMMddHHmmssff") + ".jpg";
        string filePath = rootPath + "\\"+fileName;
        if (!Directory.Exists(rootPath)){
            Directory.CreateDirectory(rootPath);
        }
        scene = "uId=" + UserId + scene;
        var bytes = GetWxacodeUnlimit(appId, appSecret, scene);
        System.IO.File.WriteAllBytes(filePath, bytes);
        return Ok("/UpLoadFiles/"+ DateTime.Now.ToString("yyyyMMdd") +"/"+ fileName);
    }
    catch (Exception ex)
    {
        return NotFound(ex.Message);
    }
}



// 返回图片字节数组
public byte[] GetWxacodeUnlimit(string appId, string appSecret, string scene, string page = null, int width = 430)
{
    if (string.IsNullOrEmpty(scene)) throw new ArgumentException("scene 必须提供");
    var token = GetAccessToken(appId, appSecret);
    var client = new RestClient($"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={token}");
    var request = new RestRequest(Method.POST);
    request.AddHeader("Content-Type", "application/json");
    var body = new
    {
        scene = scene,
        page = "pages/my/my",   // 可为空
        env_version="trial",
        width = width
    };
    request.AddParameter("application/json", JsonConvert.SerializeObject(body), ParameterType.RequestBody);
    var resp = client.Execute(request);

    // 如果返回 JSON 则是错误信息
    if (!string.IsNullOrEmpty(resp.ContentType) && resp.ContentType.Contains("application/json"))
    {
        var err = JsonConvert.DeserializeObject<WxJsonError>(resp.Content);
        throw new Exception($"微信API错误: {err.errcode} {err.errmsg}");
    }

    if (resp.RawBytes == null || resp.RawBytes.Length == 0) throw new Exception("未返回图片数据");
    return resp.RawBytes;
}

前端获取码的scene信息

javascript 复制代码
onLoad: function (options) {
    console.log(options);
    if(options.scene!=undefined){//扫描二维码获取推荐人id
      const decoded = decodeURIComponent(options.scene);//解码
    }
   }
相关推荐
公子小六9 小时前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技9 小时前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha131411 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
Coder_Shenshen1 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
寂寞的船1 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
1-1=01 天前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
dreams_dream2 天前
微信小程序:页面事件-上拉触底
微信小程序·小程序
wafrdggh3 天前
2026电商快递批量查询怎么用?固乔助手模板设置评测
大数据·数据库·小程序
波力海苔夹心脆6753 天前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
AI导出鸭PC端3 天前
Perplexity批量导出没有PDF模式?AI导出鸭插件补上最后一块拼图
人工智能·pdf·c#·ai导出鸭