Maison > Applet WeChat > Développement WeChat > le corps du texte

WeChat Pay développe une interface de partage d'adresses de livraison

高洛峰
Libérer: 2017-03-06 10:10:00
original
4393 Les gens l'ont consulté

Cet article présente le processus de développement de l'interface de partage d'adresse de livraison sous paiement WeChat.

1. Introduction

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

2. Autorisation OAuth2.0

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
Copier après la connexion

🎜>
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=//m.sbmmt.com/
Copier après la connexion

Utilisez ceci pour obtenir le paramètre code, et obtenez le access_token et l'openid autorisés en fonction du code. Ce jeton d'accès sera utilisé pour l'interface de partage d'adresse de livraison.

微信支付开发收货地址共享接口

Pour le processus détaillé de sa mise en œuvre, veuillez vous référer à l'autorisation Web OAuth2.0 de développement de la plateforme publique WeChat

2. chaîne aléatoire

La méthode de génération d'une chaîne aléatoire est la suivante

微信支付开发收货地址共享接口

Générer la signature

La les champs participant à la signature addrSign incluent : appId, url (url de la page web qui appelle l'API JavaScript), timestamp, noncestr, accessToken

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
Copier après la connexion

i : Après avoir trié les paires clé-valeur via le processus a, string1 est obtenu :

accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA&appid=wx17ef1eaef46752cb&noncestr=123456&timestamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE
Copier après la connexion

ii : Après avoir signé via le processus b, vous pouvez obtenir :

addrSign=SHA1(accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmg
h5FRA&appid=wx17ef1eaef46752cb&noncestr=123456&timestamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE)=ca604c740945587544a9cc25e58dd090f200e6fb
Copier après la connexion

Le code d'implémentation est le suivant

微信支付开发收货地址共享接口

4 Obtenir l'adresse de livraison

Modifier et obtenir l'interface editAddress. de l'adresse de livraison de l'utilisateur et appelez-la sur le front-end de la page Web.

Liste des paramètres :

调用方法如下

微信支付开发收货地址共享接口

参数返回:

返回值说明
err_msgedit_address:ok获取编辑收货地址成功
edit_address:fail获取编辑收货地址失败
username收货人姓名
telNumber收货人电话
addressPostalCode邮编
proviceFirstStageName国标收货地址第一级地址
addressCitySecondStageName国标收货地址第二级地址
addressCountiesThirdStageName国标收货地址第三级地址
addressDetailInfo详细收货地址信息
nationalCode收货地址国家码

五、示例

微信支付开发收货地址共享接口 微信支付开发收货地址共享接口 微信支付开发收货地址共享接口 微信支付开发收货地址共享接口 微信支付开发收货地址共享接口

六、完整代码

<?php

/*
    方倍工作室 http://www.fangbei.org/
    CopyRight 2014 All Rights Reserved
*/


define(&#39;APPID&#39;,         "wx—b7559b828e3c13e");
define(&#39;APPSECRET&#39;,     "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;
    }

}
Copier après la connexion

<?php

require_once(&#39;wxaddr.class.php&#39;);
$weixin = new class_weixin();
$url = &#39;http://&#39;.$_SERVER[&#39;HTTP_HOST&#39;].$_SERVER[&#39;REQUEST_URI&#39;];

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[&#39;access_token&#39;];
}


$timestamp = strval(time());
$noncestr = $weixin->create_noncestr();

$obj[&#39;appId&#39;]               = $weixin->appid;
$obj[&#39;url&#39;]                 = $url;
$obj[&#39;timeStamp&#39;]           = $timestamp;
$obj[&#39;noncestr&#39;]            = $noncestr;
$obj[&#39;accesstoken&#39;]         = $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(&#39;editAddress&#39;,{
                    "appId" : "<?php echo $obj[&#39;appId&#39;];?>",
                    "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>
Copier après la connexion

 更多微信支付开发收货地址共享接口 相关文章请关注PHP中文网!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!