一、场景二、分析1、百度翻译2、执行以下代码3、打印4、分析三、封装post方法
一、场景
调用 微信小程序码生成接口 报错:
invalid scene rid: f05f96ab-5382f139-14b13d2f
二、分析
1、百度翻译
百度翻译一下为:无效的场景rid
,可能是我们的scene
参数的值格式错误
2、执行以下代码
package mainimport ("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 []byteif body != nil {var err errorbodyJson, 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