Cet article présente le processus de développement de l'interface de partage d'adresse de livraison sous paiement WeChat.
Le partage de l'adresse de livraison WeChat signifie que l'utilisateur ouvre une page Web dans le navigateur WeChat et ne remplit pas l'adresse ultérieurement pour prendre en charge une sélection rapide, et peut le faire. également être ajouté et modifié. Cette adresse est un attribut utilisateur et peut être partagée sur les pages web de différents commerçants. Prend en charge les contrôles natifs pour remplir les adresses, et les données d'adresse seront transmises au commerçant.
Le partage d'adresses est basé sur l'API JavaScript WeChat et ne peut être utilisé que dans le navigateur intégré WeChat, et les appels provenant d'autres navigateurs ne sont pas valides. Dans le même temps, la version 5.0 de WeChat est requise pour le prendre en charge. Il est recommandé d'utiliser l'agent utilisateur pour déterminer le numéro de version actuel de l'utilisateur avant d'appeler l'interface d'adresse. En prenant la version iPhone comme exemple, vous pouvez obtenir les informations d'exemple de version WeChat suivantes via useragent : "Mozilla/5.0(iphone;CPU iphone OS 5_1_1 comme Mac OS Pour le numéro de version de WeChat installé par l'utilisateur, le commerçant peut déterminer si le numéro de version est supérieur ou égal à 5.0.
Format de l'adresse
Les champs de données utilisés pour le partage d'adresse WeChat incluent :
Nom du destinataire
Région, Provincial et niveau municipal trois
Adresse détaillée
Code postal
Numéro de contact
Parmi eux, la région correspond à l'indicatif régional standard national à trois niveaux, tel que « Province du Guangdong-Ville de Guangzhou-District de Tianhe », le code postal correspondant est 510630. Lien de référence pour plus de détails : http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html
Avant d'obtenir l'adresse de livraison, vous devez appeler l'interface d'autorisation de connexion pour obtenir un jeton d'accès OAuth2.0. Par conséquent, l’autorisation doit être effectuée une seule fois et la boîte de confirmation n’apparaîtra pas pour cette autorisation.
L'essence est de passer à
http://www.fangbei.org/wxpay/js_api_call.php
🎜>
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://www.php.cn/
Après avoir trié tous les paramètres à signer selon le code ASCII du nom du champ du petit au grand (lexicographique ordre), utilisez le format de paire clé-valeur d'URL (c'est-à-dire clé1=valeur1&clé2=valeur2...) sont concaténés dans une chaîne chaîne1.
Il convient de noter ici que tous les noms de paramètres lors du processus de signature sont en caractères minuscules. Par exemple, la chaîne appId après le tri est appid
Pour l'algorithme de signature sur string1, les noms de champs et les valeurs des champs ; utilisez les valeurs d'origine et ne procédez pas à l'échappement d'URL. L'algorithme de signature spécifique est addrSign = SHA1(string1). L'exemple spécifique de génération d'addrSign est donné ici comme suit :
appId=wx17ef1eaef46752cb url=http://open.weixin.qq.com/ timeStamp=1384841012 nonceStr=123456 accessToken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA
i : Après avoir trié les paires clé-valeur via le processus a, string1 est obtenu :
accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA&appid=wx17ef1eaef46752cb&noncestr=123456×tamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE
ii : Après avoir signé via le processus b, vous pouvez obtenir :
addrSign=SHA1(accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmg h5FRA&appid=wx17ef1eaef46752cb&noncestr=123456×tamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE)=ca604c740945587544a9cc25e58dd090f200e6fb
Liste des paramètres :
调用方法如下
参数返回:
返回值 | 说明 |
---|---|
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中文网!