WeChat jssdk署名エラーinvalid signature
3727 ワード
ほぼすべてのマイクロクレジットのためのページを開発したエンジニアは、WeChat
普通彼らはあなたに
サインが違います.これはどういう意味ですか?しかし、このサインは後端から来たものです.どうしてそれが間違っているのか分かりますか?バックエンドは標準的なアルゴリズムを使っています.間違いはあり得ません.
ネット上の各種の教程を調べて、あるいはWeChat公式サイト、彼らはいつも面倒を嫌がらずにあなたに教えて、あなたに署名の計算方法を検査させて、しかしまったく役に立ちません!
また新しい状況に遭遇しましたので、WeChat公式アカウント管理の楽屋に入る必要があります.以下の順序で検査します.
まず、インタフェースの設定ページで、あなたのサーバーのドメイン名を信頼ドメイン名に加入しましたか?第二に、基本設定ページであなたのサーバーのIPアドレスをホワイトリストに追加しましたか?
WeChat要求:もし私たちがページでWeChatを呼び出すための何らかの方法が必要であれば、このページの
現在のページの
なぜなら、ウィーチャット内蔵ブラウザは
Androidでは、上の方法で呼び出すことができます.しかし、
例えば、WeChat公衆番号のメニューリンクで
原因が分かったら、いろいろな解決方法があります.
まず、私達は入り口の
したがって、私たちはまた、WeChat公衆番号の各入り口メニューにリガの特別なパラメータをリンクする必要があります.例えば、
そしてもう一つの判断を追加します.
これでWeChat署名の失敗が解決されたようです.
しかし、私たちはまた別の状況に遭遇しました.WeChatウィジェットに
jssdk
報の様々なエラーに遭遇しました.普通彼らはあなたに
permission denied
オプションを開くように勧めます. wechat.config({
debug: true,
appId: appId,
timestamp: timestamp,
nonceStr: nonceStr,
signature: signature,
jsApiList: ['scanQRCode'],
});
結果はまたdebug
に出会いました.このように:サインが違います.これはどういう意味ですか?しかし、このサインは後端から来たものです.どうしてそれが間違っているのか分かりますか?バックエンドは標準的なアルゴリズムを使っています.間違いはあり得ません.
ネット上の各種の教程を調べて、あるいはWeChat公式サイト、彼らはいつも面倒を嫌がらずにあなたに教えて、あなたに署名の計算方法を検査させて、しかしまったく役に立ちません!
invalid signature
のこの場合、署名を計算するための90%
のアドレスが間違っています.アルゴリズムとは関係がありません.時間を無駄にして署名アルゴリズムを見る必要はありません.また新しい状況に遭遇しましたので、WeChat公式アカウント管理の楽屋に入る必要があります.以下の順序で検査します.
まず、インタフェースの設定ページで、あなたのサーバーのドメイン名を信頼ドメイン名に加入しましたか?第二に、基本設定ページであなたのサーバーのIPアドレスをホワイトリストに追加しましたか?
WeChat要求:もし私たちがページでWeChatを呼び出すための何らかの方法が必要であれば、このページの
URL
アドレスで署名を取得しなければならない.よく分かりますが、実際にはURL
の住所に含まれている部分が多く、疑問符があります.URL
号があります.あなたがするのは#
の前の部分を取り出すことです.例えば、あなたの#
アドレスはこうです.URL
であれば、署名を計算するためのhttps://www.abc.com/abc.html?abc=def#xyz
アドレスはURL
であってもよくないし、https://www.abc.com/abc.html
でもないし、https://www.abc.com/abc.html?abc=def#xyz
でなければなりません.現在のページの
https://www.abc.com/abc.html?abc=def
アドレスはどうやって取得しますか?これは簡単ですlet wechaturl = window.location.href.split('#')[0];
しかし、仕事はこのまま終わったと思いますか?無邪気すぎる.あなたのページはまだWeChat関数を正常に使えません.なぜなら、ウィーチャット内蔵ブラウザは
URL
とAndroidでの表現が違っています.Androidでは、上の方法で呼び出すことができます.しかし、
iOS
の下で、署名は依然として失敗しています.iOS
では、WeChatは、現在のページのiOS
ではなく、入り口URL
を伝達する必要があるからです.例えば、WeChat公衆番号のメニューリンクで
URL
ページにアクセスし、A
ページのリンクからA
ページにジャンプし、B
ページで署名を取得し、Androidの下であればB
ページのB
アドレスで取得するべきですが、URL
下で署名を取得します.またiOS
ページのA
アドレスで取得しなければなりません.そうでなければ署名に失敗します.原因が分かったら、いろいろな解決方法があります.
まず、私達は入り口の
URL
ページにこのような判断を追加することができます.if (navigator.userAgent.indexOf('iPhone') !== -1) {
window.wechaturl = window.location + '';
}
その後、A
ページで署名を呼び出す必要があるところに、このような判断を追加する.let wechaturl = window.location.href.split('#')[0];
if (window.wechaturl !== undefined) {
wechaturl = window.wechaturl;
}
こうして私たちは有効地域にB
とAndroidを分けました.しかし、問題はiOS
の下で、もし私のもう一つのメニューの入り口がiOS
ページだったら、B
ページからB
ページにジャンプします.この時、私のエントランスリンクはA
ページに強制的に変更されました.依然として署名失敗のエラーが発生します.したがって、私たちはまた、WeChat公衆番号の各入り口メニューにリガの特別なパラメータをリンクする必要があります.例えば、
A
、このようになります.そしてもう一つの判断を追加します.
if (navigator.userAgent.indexOf('iPhone') !== -1) {
if (this.$route.query.wechat !== undefined && this.$route.query.wechat === '1') {
window.wechaturl = window.location + '';
}
}
ここではwechat=1
という書き方をしましたが、原理は同じです.このパラメータを検出したのはhttps://www.abc.com/abc.html?abc=def&wechat=1
だけです.現在のページは入り口ページだと思っています.検出されていないなら、あえて入り口ページに設定する必要はありません.これでWeChat署名の失敗が解決されたようです.
しかし、私たちはまた別の状況に遭遇しました.WeChatウィジェットに
vue
の埋め込まれたウェブページを使って、Androidの下でwechat
とweb-view
のエラーを報告しました.でも、上記の経験があります.エラーの元はまだpermission denied
入口の住所です.案の定、Androidの下で入り口の住所で署名を取得しましたが、現在の住所で署名を取得できませんでした.そのため、入り口のページでもう一つの判断を加えました.if (navigator.userAgent.indexOf('miniProgram') !== -1) {
window.wechaturl = window.location + '';
}
これで、各種の署名ミスの問題は全部解決されます.