WeChat Pay entwickelt eine Schnittstelle zum Teilen von Lieferadressen

高洛峰
Freigeben: 2017-03-06 10:10:00
Original
4427 Leute haben es durchsucht

In diesem Artikel wird der Entwicklungsprozess der Schnittstelle zum Teilen von Lieferadressen unter WeChat-Zahlung vorgestellt.

1. Einführung

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

2. OAuth2.0-Autorisierung

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
Nach dem Login kopieren

zugreift 🎜>
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://www.php.cn/
Nach dem Login kopieren

Verwenden Sie dies, um den Code-Parameter abzurufen und das autorisierte access_token und die openid basierend auf dem Code abzurufen. Dieses Zugriffstoken wird für die Schnittstelle zur gemeinsamen Nutzung der Lieferadresse verwendet.

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

Den detaillierten Prozess der Implementierung finden Sie unter WeChat Public Platform Development OAuth2.0 Web Authorization

2 Zufallszeichenfolge

Die Methode zum Generieren einer Zufallszeichenfolge ist wie folgt

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

Signatur generieren

Die Zu den an der AddrSign-Signatur beteiligten Feldern gehören: appId, URL (Webseiten-URL, die die JavaScript-API aufruft), Zeitstempel, Noncestr, AccessToken

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
Nach dem Login kopieren

i: Nach dem Sortieren der Schlüssel-Wert-Paare durch den a-Prozess, string1 wird erhalten:

accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA&appid=wx17ef1eaef46752cb&noncestr=123456&timestamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE
Nach dem Login kopieren
ii: Nach dem Signieren durch Prozess b erhalten Sie:

addrSign=SHA1(accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmg
h5FRA&appid=wx17ef1eaef46752cb&noncestr=123456&timestamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE)=ca604c740945587544a9cc25e58dd090f200e6fb
Nach dem Login kopieren

Der Implementierungscode lautet wie folgt

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

4. Erhalten Sie die Lieferadresse

Bearbeiten Sie die editAddress-Schnittstelle und rufen Sie sie ab der Lieferadresse des Benutzers und rufen Sie diese im Frontend der Webseite auf.

Parameterliste:


调用方法如下

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

参数返回:

返回值说明
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;
    }

}
Nach dem Login kopieren

<?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>
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage