golang 微信小程序获取二维码scene参数报错 invalid scene rid: f05f96ab-5382f139-14b13d2f

一、场景

调用 微信小程序码生成接口 报错:invalid scene rid: f05f96ab-5382f139-14b13d2f

二、分析

1、百度翻译

  • 百度翻译一下为:无效的场景rid,可能是我们的scene参数的值格式错误

2、执行以下代码

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"log"
)

func main() {
    
    
	data := map[string]interface{
    
    }{
    
    
		"scence": "user_id=1&order_id=3",
	}
	transferMean(data)
	//notTransferMean(data)
}

//转义
func transferMean(body map[string]interface{
    
    }) {
    
    
	var bodyJson []byte
	if body != nil {
    
    
		var err error
		bodyJson, err = json.Marshal(body)
		if err != nil {
    
    
			log.Print(err)
		}
	}
	fmt.Println(bytes.NewBuffer(bodyJson))
}

//不转义
func notTransferMean(body map[string]interface{
    
    }) {
    
    
	buffer := bytes.NewBuffer([]byte{
    
    })
	if body != nil {
    
    
		jsonEncoder := json.NewEncoder(buffer)
		jsonEncoder.SetEscapeHTML(false)
		err := jsonEncoder.Encode(body)
		if err != nil {
    
    
			log.Print(err)
		}
	}
	fmt.Println(buffer)
}

3、打印

{
    
    "scence":"user_id=1\u0026order_id=3"}

Process finished with exit code 0

4、分析

  • 我们可以看到符号&被转义成了\u0026
  • 而我们的scene只支持最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
  • 很明显转义后的 \并不包含在scene
  • 所以我们要禁止json.Marshal()方法 特殊字符转义
  • 打开这行注释//notTransferMean(data),即可得到结果如下:
{
    
    "scence":"user_id=1\u0026order_id=3"}
{
    
    "scence":"user_id=1&order_id=3"}


Process finished with exit code 0

三、封装post方法

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/113398231
今日推荐