WeChatアプレット-ユーザーsession_を取得するkey,openid-バックエンドはnodejs,Kooa 2フレームです.
4606 ワード
これはcsdnでの最初の文章です.他の人の文章をたくさん読みました.
最近はプログラムを書いています.ゼロNodejsをもとに書いて、大きな穴を踏みました.もう二度とこのようなことをしません.
私の小さいプログラムはWeChatのKooa 2フレームを使っています.新規プロジェクトを作る時に開発者がツールをくれたdemoです.ウィジェットはユーザーのopenidを取得してデータベースを作成する必要があります.自分で車輪が作れないので、ネットで他の人の輪を探してみます.これは私が見つけた適当な(ブロガーの名前:意外な金喜)です.クリックしてリンクを開けてください.はっきり言って、このビームのコードをコピーします.この中には二つの穴があります.別々に話します.もし同じ状況に遭遇した人がいたら、私が書いたものをあなた達に手伝ってほしいです.
一つ目は、wx.requestの一つのバグです.
(バグではなく、書けないかもしれません.)wx.requestを使ってユーザーの登録証コードを後端に送り、ユーザーのopenidと交換します.これはWeChatからのデモです.
意外にも金喜はExpressの枠组みを使っていますので、小プログラムのKooaとは少し违います.このわずかな违いが长い间、廖雪峰先生の教程を読んでやっと気づいた(リンクをクリックして)、この话は私たちに、もしdebugが必要ならば、公式のドキュメントやフレームのソースコードを読むのが役に立つと诉えています.
以下は意外な金喜のコードです.
そこで私はルートのコードを変更しました.
運転結果は以下の通りです.
最近はプログラムを書いています.ゼロNodejsをもとに書いて、大きな穴を踏みました.もう二度とこのようなことをしません.
私の小さいプログラムはWeChatのKooa 2フレームを使っています.新規プロジェクトを作る時に開発者がツールをくれたdemoです.ウィジェットはユーザーのopenidを取得してデータベースを作成する必要があります.自分で車輪が作れないので、ネットで他の人の輪を探してみます.これは私が見つけた適当な(ブロガーの名前:意外な金喜)です.クリックしてリンクを開けてください.はっきり言って、このビームのコードをコピーします.この中には二つの穴があります.別々に話します.もし同じ状況に遭遇した人がいたら、私が書いたものをあなた達に手伝ってほしいです.
一つ目は、wx.requestの一つのバグです.
(バグではなく、書けないかもしれません.)wx.requestを使ってユーザーの登録証コードを後端に送り、ユーザーのopenidと交換します.これはWeChatからのデモです.
wx.request({
url: 'test.php', // ,
data: {
x: '' ,
y: ''
},
header: {
'content-type': 'application/json' //
},
success: function(res) {
console.log(res.data)
}
})
しかし、私のバックエンドはデータを受信できません.シングルステップのデバッグを起動して、consolie.logs()で何かのデータを送ってみましたが、dataというパラメータは全くないです.どうしようもなくて、模索しました.コードをheaderの中に隠して、後端コードをheadersの中のパラメータを読み取って伝参を完成することができます.以下は私のコードです. static request(url, params, method = "POST", type = "application/x-www-form-urlencoded") {
console.log(" ", params);
return new Promise((resolve, reject) => {
let opts = {
url: url,
method: method,
header: {
'Content-Type': type,
'accept': params,
},
success: resolve,
fail: reject
}
console.log(" URL", opts.url);
wx.request(opts);
});
};
第二に、枠が違っています.文法が違います.意外にも金喜はExpressの枠组みを使っていますので、小プログラムのKooaとは少し违います.このわずかな违いが长い间、廖雪峰先生の教程を読んでやっと気づいた(リンクをクリックして)、この话は私たちに、もしdebugが必要ならば、公式のドキュメントやフレームのソースコードを読むのが役に立つと诉えています.
以下は意外な金喜のコードです.
router.post("/openid", async (req, res) => {
const Ut = require("../common/utils");
try {
console.log(req.body);
let appId = "wx70xxxxxxbed01b";
let secret = "5ec6exxxxxx49bf161a79dd4";
let { js_code } = req.body;
let opts = {
url: `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${secret}&js_code=${js_code}&grant_type=authorization_code`
}
let r1 = await Ut.promiseReq(opts);
r1 = JSON.parse(r1);
console.log(r1);
res.json(r1);
}
catch (e) {
console.log(e);
res.json('');
}
})
問題はasync(req,res)にあります.これはexpressの書き方ですが、KKAではここのパラメータは違います.KKAの書き方は async(req,res) , ctx koa request response , request response,next koa 。
上記の数字は廖雪峰先生が書いたものです.意外な金喜のコードをそのまま運ぶと、「res.json is not a function」と間違えます.res.jsonはexpressのものですから、Kooの中にはありません.そこで私はルートのコードを変更しました.
router.post("/openid", async function (ctx, next) {
const Ut = require("../common/utils");
console.log('ctx.response: ', ctx.response)
console.log('ctx.request: ', ctx.request)
try {
let grant_type = 'authorization_code'
let appid = config.appId
let secret = config.appSecret
let code = ctx.accept.headers.accept
console.log('req code: ', code);
let opts = {
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + code + '&grant_type=' + grant_type
}
let r1 = await Ut.promiseReq(opts);
r1 = JSON.parse(r1);
console.log('r1 is:', r1);
openid = r1.openid
ctx.response.body = openid
}
catch (e) {
console.log(e);
ctx.response.status = 403
}
})
res.jsonをctx.reponse.bodyに変更すればいいです.運転結果は以下の通りです.
login code: 061iT8Hv1VtW0b07dWHv1m3SGv1iT8Hj
appservice?t=1530270757816:1084 Fri Jun 29 2018 19:12:42 GMT+0800 (China Standard Time)
wechat.js? [sm]:59 getUserInfo {errMsg: "getUserInfo:ok", rawData: "{"nickName":" ","gender":1,"language":"en","ci…rkwjS4R0jca8z8mMXGZ7fwFd9DXsfZY9podNmKh3gGQ/132"}", userInfo: {…}, signature: "a6ea2264b97da6813dff42d6f7ea24969e68490b", encryptedData: "cCrJ0XjJhmmqJWQ0ry3vqebd7Hv6Ixx2p8DMaUwW0YFMGWFqK7…48onyskBK8jwRzGdakk9naOmLXd1paEWYGebEtwldjbTyg/Q=", …}
wechat.js? [sm]:29 : 061iT8Hv1VtW0b07dWHv1m3SGv1iT8Hj
wechat.js? [sm]:42 URL: https://cevgpypz.qcloud.la/weapp/openid
index.js? [sm]:102 openid: ovvsAxxxxxp9blJ-XvmOxxxxxu2c