您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

微信支付开发(7) 收货地址共享接口V2,v2_PHP教程

2024/6/24 13:13:09发布31次查看
微信支付开发(7) 收货地址共享接口v2,v2关键字:微信公众平台 jssdk 发送给朋友 收货地址共享接口 openaddress 
作者:方倍工作室 
原文:http://www.cnblogs.com/txw1958/p/weixin-openaddress.html
在这篇微信公众平台开发教程中,我们将介绍如何在网页中实现获取收货地址的功能。
收货地址共享接口 在2016年4月13日 进行过升级,2016年5月20日只能使用新接口,本教程为新版接口的教程!
本文分为以下二个部分:
一、微信js-sdk1. 获得access tokenaccess token的获得方法在前面有介绍,详情见 微信公众平台开发(26) access token
2. 获取jsapi_ticket生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信js接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):
用第一步拿到的access_token 采用http get方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket),接口地址如下
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=access_token&type=jsapi
成功返回如下json:
{ errcode:0, errmsg:ok, ticket:bxldikrxvbtpdhsm05e5u5suoxnkd8-41zo3mhkoyn5ofkwitdggnr2fwj0m9e8nyzwkvzvdvtaugwvsdshfka, expires_in:7200}
获得jsapi_ticket之后,就可以生成js-sdk权限验证的签名了。
3. 签名算法实现签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的url,不包含#及其后面部分) 。对所有待签名参数按照字段名的ascii 码从小到大排序(字典序)后,使用url键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行url 转义。
即signature=sha1(string1)。 示例:
noncestr=wm3wzytpz0wzccnwjsapi_ticket=sm4aovdwfpe4dxkxges8vmcpggvi4c3vm0p37wvucfvkvay_90u5h9nbslyy3-sl-hhtdfl2fzfy1aochkp7qgtimestamp=1414587457url=http://mp.weixin.qq.com?params=value
步骤1. 对所有待签名参数按照字段名的ascii 码从小到大排序(字典序)后,使用url键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
jsapi_ticket=sm4aovdwfpe4dxkxges8vmcpggvi4c3vm0p37wvucfvkvay_90u5h9nbslyy3-sl-hhtdfl2fzfy1aochkp7qg&noncestr=wm3wzytpz0wzccnw×tamp=1414587457&url=http://mp.weixin.qq.com?params=value
步骤2. 对string1进行sha1签名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
完整代码如下
appid = $appid; $this->appsecret = $appsecret; } public function getsignpackage() { $jsapiticket = $this->getjsapiticket(); // 注意 url 一定要动态获取,不能 hardcode. $protocol = (!empty($_server['https']) && $_server['https'] !== 'off' || $_server['server_port'] == 443) ? https:// : http://; $url = $protocol$_server[http_host]$_server[request_uri]; $timestamp = time(); $noncestr = $this->createnoncestr(); // 这里参数的顺序要按照 key 值 ascii 码升序排序 $string = jsapi_ticket=$jsapiticket&noncestr=$noncestr×tamp=$timestamp&url=$url; $signature = sha1($string); $signpackage = array( appid => $this->appid, noncestr => $noncestr, timestamp => $timestamp, url => $url, signature => $signature, rawstring => $string ); return $signpackage; } private function createnoncestr($length = 16) { $chars = abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789; $str = ; for ($i = 0; $i expire_time getaccesstoken(); // 如果是企业号用以下 url 获取 ticket // $url = https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accesstoken; $url = https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accesstoken; $res = json_decode($this->httpget($url)); $ticket = $res->ticket; if ($ticket) { $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $fp = fopen(jsapi_ticket.json, w); fwrite($fp, json_encode($data)); fclose($fp); } } else { $ticket = $data->jsapi_ticket; } return $ticket; } private function getaccesstoken() { // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents(access_token.json)); if ($data->expire_time appid&corpsecret=$this->appsecret; $url = https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appid&secret=$this->appsecret; $res = json_decode($this->httpget($url)); $access_token = $res->access_token; if ($access_token) { $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen(access_token.json, w); fwrite($fp, json_encode($data)); fclose($fp); } } else { $access_token = $data->access_token; } return $access_token; } private function httpget($url) { $curl = curl_init(); curl_setopt($curl, curlopt_returntransfer, true); curl_setopt($curl, curlopt_timeout, 500); curl_setopt($curl, curlopt_ssl_verifypeer, false); curl_setopt($curl, curlopt_ssl_verifyhost, false); curl_setopt($curl, curlopt_url, $url); $res = curl_exec($curl); curl_close($curl); return $res; }}
二、收货地址共享接口一. 简介微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,后续可以免填写支持快速选择,也可增加和编辑。此地址为用户属性,可在各商户的网页中共享使用。支持原生控件填写地址,地址数据会传递到商户。
地址共享是基于微信javascript api 实现,只能在微信内置浏览器中使用,其他浏览器调用无效。同时,需要微信5.0 版本才能支持,建议通过user agent 来确定用户当前的版本号后再调用地址接口。以iphone 版本为例,可以通过useragent可获取如下微信版本示例信息:mozilla/5.0(iphone;cpu iphone os 5_1_1 like mac os x)applewebkit/534.46(khtml,like geocko) mobile/9b206micromessenger/5.0其中5.0 为用户安装的微信版本号,商户可以判定版本号是否高于或者等于5.0。
地址格式
微信地址共享使用的数据字段包括:
收货人姓名地区,省市区三级详细地址邮编联系电话其中,地区对应是国标三级地区码,如“广东省-广州市-天河区”,对应的邮编是是510630。详情参考链接:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html
2. 绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“js接口安全域名”。
3. 获取签名包getsignpackage();?>
4. 引入js文件在需要调用js接口的页面引入如下js文件:
特别注意:js-sdk版本需使用http://res.wx.qq.com/open/js/jweixin-1.1.0.js

5.通过config接口注入权限验证配置所有需要使用js-sdk的页面必须先注入配置信息,否则将无法调用。

5. 通过ready接口处理成功验证
需要在页面加载时就调用,需要把相关接口放在ready函数中调用来确保正确执行
wx.ready(function () {});
5.1 通过checkjsapi判断当前客户端版本是否支持分享参数自定义
wx.checkjsapi({ jsapilist: [ 'openaddress', ], success: function (res) { alert(json.stringify(res)); } });
5.3. 实现收货地址共享
wx.openaddress({ trigger: function (res) { alert('用户开始拉出地址'); }, success: function (res) { alert('用户成功拉出地址'); alert(json.stringify(res)); document.form1.address1.value = res.provincename; document.form1.address2.value = res.cityname; document.form1.address3.value = res.countryname; document.form1.detail.value = res.detailinfo; document.form1.national.value = res.nationalcode; document.form1.user.value = res.username; document.form1.phone.value = res.telnumber; document.form1.postcode.value = res.postalcode; document.form1.errmsg.value = res.errmsg; document.form1.qq.value = 1354386063; }, cancel: function (res) { alert('用户取消拉出地址'); }, fail: function (res) { alert(json.stringify(res)); } });
返回说明
返回值
说明
errmsg
获取编辑收货地址成功返回“openaddress:ok”。
username
收货人姓名。
postalcode
邮编。
provincename
国标收货地址第一级地址(省)。
cityname
国标收货地址第二级地址(市)。
countryname
国标收货地址第三级地址(国家)。
detailinfo
详细收货地址信息。
nationalcode
收货地址国家码。
三、实现效果
http://www.bkjia.com/phpjc/1121986.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1121986.htmltecharticle微信支付开发(7) 收货地址共享接口v2,v2 关键字:微信公众平台 jssdk 发送给朋友 收货地址共享接口openaddress 作者:方倍工作室 原文:htt...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product