VorwortKürzlich bin ich bei der Entwicklung eines kleinen Programms auf ein solches Problem gestoßen: Wenn der Benutzer auf Autorisierung klickt und versucht, die Mobiltelefonnummer zu entschlüsseln, schlägt dies beim ersten Mal fehl, beim zweiten Mal gelingt es jedoch. Nach einigem Nachdenken habe ich endlich eine vernünftigere Lösung gefunden. Ich zeichne sie hier auf und fasse sie zusammen, in der Hoffnung, dass sie allen helfen kann. AnforderungsbeschreibungNachdem der Benutzer auf die Schaltfläche „Telefon abrufen“ geklickt hat, wird die vom Benutzer in WeChat festgelegte Telefonnummer entschlüsselt und im Eingabefeld für die Kontakttelefonnummer angezeigt. Spezifischer Code<Ansichtsklasse="cu-form-group"> <view class="title text-black">Kontakttelefonnummer</view> <input class="radius" name="mobile" placeholder="Bitte geben Sie Ihre Kontaktnummer ein" value="{{detail.mobile}}" bindinput="onInputMobile"></input> <button bindgetphonenumber="getPhoneNumber" class="cu-btn line-blue sm" openType="getPhoneNumber">Telefonnummer abrufen</button> </Ansicht> Zuerst benötigen Sie die Applet-Schaltflächenkomponente und setzen openType="getPhoneNumber" beim Laden: asynchrone Funktion () { dies.getSessionKey() }, async getSessionKey() { const { code } = warte auf wx.login() const res = warte auf Index.getSessionKey({ Code }) wenn (res.code == 1) { dies.setData({ Sitzungsschlüssel: res.data }) } }, getPhoneNumber: asynchrone Funktion (e) { wenn (e.detail.errMsg === "getPhoneNumber:ok") { const res = warte auf Index.getPhone({ iv: e.detail.iv, verschlüsselteDaten: e.detail.verschlüsselteDaten, Sitzungsschlüssel: diese.Daten.Sitzungsschlüssel }) wenn (res.err == 0) { wx.showToast({ Titel: „Das Netzwerk ist etwas instabil. Klicken Sie hier, um es erneut zu versuchen“, Symbol: „keine“ }) zurückkehren } const detail = diese.Daten.detail detail.mobile = res.err.phoneNumber dies.setData({ Detail }) } sonst wenn (e.detail.errMsg === "getPhoneNumber:fail user deny") { wx.showModal({ Titel: 'Tipps', Inhalt: „Sie haben die Autorisierung abgelehnt, bitte klicken Sie erneut und autorisieren Sie“, showCancel: false, Bestätigungstext: "Verstanden" }) } }, Holen Sie sich den Anmeldecode während des onLoad-Lebenszyklus und senden Sie den Code an den Server, um den Sitzungsschlüssel abzurufen Bitte beachten Sie die offizielle Dokumentation des Miniprogramms, um den Sitzungsschlüssel auf der Serverseite zu erhalten. Nachdem der Benutzer auf die Schaltfläche „Telefon abrufen“ geklickt hat, werden der Sitzungsschlüssel und die erhaltenen iv- und verschlüsselten Daten zur Entschlüsselung an den Server gesendet. Auf diese Weise können Sie die Mobiltelefonnummer des Benutzers ermitteln. GrubeUnsere bisherige Lösung bestand darin, wx.logon() direkt in der Funktion getPhoneNumber aufzurufen, nachdem der Benutzer auf die Schaltfläche „Telefonnummer abrufen“ geklickt hatte, und den Code, iv und encryptedData an den Server zu senden. Der Server verwendete den Code zunächst, um den Sitzungsschlüssel abzurufen, und kombinierte ihn dann mit iv und encryptedData zur Entschlüsselung. Auf diese Weise würde die erste Entschlüsselung fehlschlagen, und ein erneutes Klicken auf die Schaltfläche zum Aufrufen der Entschlüsselungsschnittstelle würde erfolgreich sein. Und die Situation wird alle 5–6 Minuten erneut auftreten. Der Aufruf von wx.checkSession(Object object) zur Überprüfung, ob der Anmeldestatus abgelaufen ist, ist immer erfolgreich. erratenSpäter habe ich darüber nachgedacht, warum ich wx.login nicht in der Funktion getPhoneNumber aufrufen kann, damit der Server den Code gegen session_key eintauschen und ihn anschließend mit iv kombinieren kann, um encryptedData zu entschlüsseln? Wie wäre es, wx.login in onLoad einzufügen, um den Sitzungsschlüssel zu erhalten? Ich denke, der Session_key des WeChat-Servers wird aktualisiert, wenn wx.login aufgerufen wird. Wenn wx.login direkt in getPhoneNumber aufgerufen wird, hat der WeChat-Server möglicherweise keine Zeit, ihn zu aktualisieren, und der Server verwendet ihn zur Entschlüsselung. Der beim letzten Mal abgelaufene Session_key wird weiterhin zur Entschlüsselung verwendet, sodass er erst nach dem zweiten Mal erfolgreich ist. Wenn wx.login in onload platziert wird, kann session_key rechtzeitig abgerufen werden. ZusammenfassenDies ist das Ende dieses Artikels über die Fallstricke beim Erhalt von Mobiltelefonnummern über WeChat-Miniprogramme. Weitere relevante Inhalte zum Erhalt von Mobiltelefonnummern über WeChat-Miniprogramme finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Der Unterschied zwischen den Feldtypen char, varchar und Text in MySQL
>>: Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?
1. css: dragTable.css @Zeichensatz "UTF-8&qu...
Erstellen einer Tabelle CREATE TABLE `map` ( `id`...
In diesem Artikelbeispiel wird der spezifische Co...
1. Zeitarten werden unterteilt in: 1. Netzwerkzei...
Beim Installieren von Paketen auf einem Ubuntu-Se...
Bei Verwendung einer Oracle-Datenbank für Fuzzy-A...
1. Installieren Sie xshell6 2. Stellen Sie eine S...
Ist es der unten gezeigte Effekt? Wenn ja, lesen ...
In der Vergangenheit wurde Float häufig für das L...
Inhaltsverzeichnis 1. Einleitung 2. GitHub 3. Gru...
Inhaltsverzeichnis Überblick Erfordern URL der An...
In diesem Artikel wird der spezifische JavaScript...
Informationen zu CSS3-Variablen Fügen Sie beim De...
Es scheint, dass die MySQL-Server-Datei zur norma...
1. Zum Vergleich der Datumsgröße muss das an XML ...