In diesem Artikel wird der Entwicklungsprozess der Schnittstelle zum Teilen von Lieferadressen unter WeChat-Zahlung vorgestellt.
Das Teilen von WeChat-Lieferadressen bedeutet, dass der Benutzer eine Webseite im WeChat-Browser öffnet und die Adresse eingibt, um eine schnelle Auswahl zu unterstützen auch hinzugefügt und bearbeitet werden. Diese Adresse ist ein Benutzerattribut und kann auf den Webseiten verschiedener Händler geteilt werden. Unterstützt native Steuerelemente zum Ausfüllen von Adressen und die Adressdaten werden an den Händler weitergeleitet.
Die Adressfreigabe basiert auf der WeChat-JavaScript-API und kann nur im integrierten WeChat-Browser verwendet werden. Aufrufe von anderen Browsern sind ungültig. Gleichzeitig ist zur Unterstützung WeChat Version 5.0 erforderlich. Es wird empfohlen, vor dem Aufruf der Adressschnittstelle die aktuelle Versionsnummer des Benutzers zu ermitteln. Am Beispiel der iPhone-Version können Sie über den Benutzeragenten die folgenden Beispielinformationen zur WeChat-Version abrufen: „Mozilla/5.0(iphone;CPU iphone OS 5_1_1 wie Mac OS“ Anhand der vom Benutzer installierten Versionsnummer von WeChat kann der Händler feststellen, ob Die Versionsnummer ist größer oder gleich 5.0.
Adressformat
Die für die WeChat-Adressfreigabe verwendeten Datenfelder umfassen:
Name des Empfängers
Region, Provinz und kommunale Ebene drei
Detaillierte Adresse
Postleitzahl
Kontaktnummer
Unter diesen entspricht die Region der dreistufigen Landesvorwahl, wie zum Beispiel „Provinz Guangdong-Guangzhou-Stadt-Tianhe-Bezirk“, die entsprechende Postleitzahl ist 510630. Referenzlink für Details: http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html
Bevor Sie die Lieferadresse erhalten, müssen Sie die Login-Autorisierungsschnittstelle aufrufen, um ein OAuth2.0-Zugriffstoken zu erhalten. Daher muss die Autorisierung einmal durchgeführt werden und das Bestätigungsfeld wird für diese Autorisierung nicht angezeigt.
Das Wesentliche ist, zu
http://www.fangbei.org/wxpay/js_api_call.php
zugreift 🎜>
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://www.php.cn/
Nachdem alle zu signierenden Parameter entsprechend dem ASCII-Code des Feldnamens von klein nach groß (lexikographisch) sortiert wurden Reihenfolge), verwenden Sie das URL-Schlüssel-Wert-Paarformat (d. h. Schlüssel1=Wert1&Schlüssel2=Wert2...) und werden zu einer Zeichenfolge Zeichenfolge1 verkettet.
Hier ist zu beachten, dass alle Parameternamen während des Signaturvorgangs in Kleinbuchstaben vorliegen. Beispielsweise ist die appId-Zeichenfolge nach der Sortierung appid; Der Signaturalgorithmus wird für string1 verwendet Verwenden Sie die ursprünglichen Werte und es wird keine weitere Verarbeitung durchgeführt. Der spezifische Signaturalgorithmus ist addrSign = SHA1(string1). Das spezifische Beispiel für die Generierung von addrSign wird hier wie folgt angegeben:
appId=wx17ef1eaef46752cb url=http://open.weixin.qq.com/ timeStamp=1384841012 nonceStr=123456 accessToken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA
accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA&appid=wx17ef1eaef46752cb&noncestr=123456×tamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE
addrSign=SHA1(accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmg h5FRA&appid=wx17ef1eaef46752cb&noncestr=123456×tamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE)=ca604c740945587544a9cc25e58dd090f200e6fb
Der Implementierungscode lautet wie folgt
4. Erhalten Sie die Lieferadresse
调用方法如下
参数返回:
返回值 | 说明 |
---|---|
err_msg | edit_address:ok获取编辑收货地址成功 |
edit_address:fail获取编辑收货地址失败 | |
username | 收货人姓名 |
telNumber | 收货人电话 |
addressPostalCode | 邮编 |
proviceFirstStageName | 国标收货地址第一级地址 |
addressCitySecondStageName | 国标收货地址第二级地址 |
addressCountiesThirdStageName | 国标收货地址第三级地址 |
addressDetailInfo | 详细收货地址信息 |
nationalCode | 收货地址国家码 |
<?php /* 方倍工作室 http://www.fangbei.org/ CopyRight 2014 All Rights Reserved */ define('APPID', "wx—b7559b828e3c13e"); define('APPSECRET', "2b21b42d0c497de9a691a6bb5048a601"); class class_weixin { var $appid = APPID; var $appsecret = APPSECRET; //构造函数,获取Access Token public function __construct($appid = NULL, $appsecret = NULL) { if($appid && $appsecret){ $this->appid = $appid; $this->appsecret = $appsecret; } } //生成OAuth2的URL public function oauth2_authorize($redirect_url, $scope, $state = NULL) { $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".$redirect_url."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect"; return $url; } //生成OAuth2的Access Token public function oauth2_access_token($code) { $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code"; $res = $this->http_request($url); return json_decode($res, true); } //生成随机字符串 function create_noncestr($length = 16) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++ ){ $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } //生成签名 function get_biz_sign($bizObj) { //参数小写 foreach ($bizObj as $k => $v){ $bizParameters[strtolower($k)] = $v; } //字典序排序 ksort($bizParameters); //URL键值对拼成字符串 $buff = ""; foreach ($bizParameters as $k => $v){ $buff .= $k."=".$v."&"; } //去掉最后一个多余的& $buff2 = substr($buff, 0, strlen($buff) - 1); //sha1签名 return sha1($buff2); } //HTTP请求(支持HTTP/HTTPS,支持GET/POST) protected function http_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return $output; } }
<?php require_once('wxaddr.class.php'); $weixin = new class_weixin(); $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if (!isset($_GET["code"])){ $jumpurl = $weixin->oauth2_authorize($url, "snsapi_base", "fangbei"); Header("Location: $jumpurl"); }else{ $oauth2_access_token = $weixin->oauth2_access_token($_GET["code"]); $access_token = $oauth2_access_token['access_token']; } $timestamp = strval(time()); $noncestr = $weixin->create_noncestr(); $obj['appId'] = $weixin->appid; $obj['url'] = $url; $obj['timeStamp'] = $timestamp; $obj['noncestr'] = $noncestr; $obj['accesstoken'] = $access_token; $signature = $weixin->get_biz_sign($obj); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>获取共享收货地址</title> <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no;"> <script language="javascript"> function callpay() { WeixinJSBridge.invoke('editAddress',{ "appId" : "<?php echo $obj['appId'];?>", "scope" : "jsapi_address", "signType" : "sha1", "addrSign" : "<?php echo $signature;?>", "timeStamp" : "<?php echo $timestamp;?>", "nonceStr" : "<?php echo $noncestr;?>", },function(res){ alert(JSON.stringify(res)); document.form1.address1.value = res.proviceFirstStageName; document.form1.address2.value = res.addressCitySecondStageName; document.form1.address3.value = res.addressCountiesThirdStageName; document.form1.detail.value = res.addressDetailInfo; document.form1.national.value = res.nationalCode; document.form1.user.value = res.userName; document.form1.phone.value = res.telNumber; document.form1.postcode.value = res.addressPostalCode; document.form1.errmsg.value = res.err_msg; }); } </script> </head> <body> <form name="form1" target="_blank"> <table border="1"> <colgroup><col width="20%"><col width="80%"></colgroup> <TR><th>结果</th><th><INPUT value="" name="errmsg" id="9"></th> <TR><th>国家码</th><th><INPUT value="" name="national" id="6"></th> <TR><th>国家</th><th><INPUT value="" name="address3" id="3"></th> <TR><th>省</th><th><INPUT value="" name="address1" id="1"></th> <tr><th>市</th><th><INPUT value="" name="address2" id="2"></th> <TR><th>详细</th><th><INPUT value="" name="detail" id="4"></th> <TR><th>收货人</th><th><INPUT value="" name="user" id="7"></th> <TR><th>电话</th><th><INPUT value="" name="phone" id="5"></th> <TR><th>邮编</th><th><INPUT value="" name="postcode" id="8"></th> </table> </form> <div> <button type="button" onclick="callpay()">获取收货地址</button> </div> </body> </html>
更多微信支付开发收货地址共享接口 相关文章请关注PHP中文网!