php开发微信支付获取用户地址


Posted in PHP onOctober 04, 2015

使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能。

微信商城中,使用微信支付获取用户的收货地址,可以省略用户输入地址信息的繁复流程,提高用户体验。

但是可能是因为牵扯到用户隐私,所以在使用过程中,需要用户自己主动选择使用该功能,并且是通过点击的操作,我们才可以获取到用户的收货地址,这一点是要注意的。

操作流程如下:

1.用户打开购物车页面,点击结算,跳转到一个微信的oauth2的页面,地址为:https://open.weixin.qq.com/connect/oauth2/authorize

2.oauth2页面将链接redirect到结算页面,使用PHP获取到链接中的code参数,经过处理获取到accessToken值。生成签名,组装成数组参数传递到页面。

3.结算页面使用用户点击事件,结合2中生成的数组参数完成获取地址的功能。这里可以有一个将获取到的地址使用ajax记录到数据库的功能,那么客户下次购物的时候,就不用麻烦了。

详细的讲下需要注意的几点:

1.跳转到微信oauth2的这个步骤,在用户看来是没有多少差别的,但是在程序这里就有很多的事情要做。首先是oauth2页面的参数,其中appid为微信appid,redirect_uri为urlencode后的订单结算页面的地址,response_type为固定的code,scope为固定的snsapi_base,state在这个地方可随意填写,还有一个#wechat_redirect,那么该链接的最终样子为:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=订单结算地址&response_type=code&scope=snsapi_base&state=随意填写#wechat_redirect

2.用户访问到该地址,被重新定位到追加了code参数订单结算地址,在此页面需要由程序获取到accessToken,注意该accessToken为获取用户信息的accessToken跟另外一个和微信交互的access token不是同一个。

使用GET请求就可以获取该accessToken,可以使用curl或者是file_get_contents。请求地址为:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APP_SECRET&code=CODE&grant_type=authorization_code;

这里有一点需要注意,有时候微信会抽风,会连续多次请求订单结算页面,造成accessToken失效,需特殊处理。

这里的签名生成和微信支付里面的签名不一样,这里的要简单很多,只是加密一个字符串,格式为:accesstoken=ACCESSTOKEN&appid=APPID&noncestr=32位随机字符串×tamp=时间戳&url=当前页面的URL,然后对该字符串进行sha1加密。

在前端页面中需要使用一连串的参数来实现获取地址的功能,分别是appID,scope(默认为jsapi_address),signType(默认为sha1),addrSign(上面sha1加密后的字符串),timeStamp(同上文的时间戳),nonceStr(同上文的随机字符串)。

3.在前端页面,使用下面的js函数来完成获取用户地址的操作:

function get_addr()
{
  WeixinJSBridge.invoke('editAddress',{
  "appId" : "<?php echo $sign['appId']?>",
  "scope" : "jsapi_address",
  "signType" : "sha1",
  "addrSign" : "<?php echo $sign['addrSign']?>",
  "timeStamp" : "<?php echo $sign['timeStamp']?>",
  "nonceStr" : "<?php echo $sign['nonceStr']?>",
  },function(res){
  if(res.err_msg == 'edit_address:ok')
  {
      
      
      //将地址信息存入数据库
      //将地址信息显示在当前页面
    
      document.getElementById("address_info").innerHTML="<b>收件人:"+res.userName+"</b>   <b>"+res.telNumber+"</b><br /> 收货地址:"+res.proviceFirstStageName+res.addressCitySecondStageName+res.addressCountiesThirdStageName+res.addressDetailInfo;
      
 } else{ alert("获取地址失败,请重新点击"); } }); }

至此,使用微信获取用户共享地址的开发就完毕了。

PHP 相关文章推荐
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 #PHP
8个必备的PHP功能开发
Oct 02 #PHP
PHP人民币金额转大写实例代码
Oct 02 #PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 #PHP
php中preg_match的isU代表什么意思
Oct 01 #PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 #PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 #PHP
You might like
PHP环形链表实现方法示例
2017/09/15 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
canvas绘制多边形
2017/02/24 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
django实现前后台交互实例
2017/08/07 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
医药大学生求职简历的自我评价
2013/10/17 职场文书
管理科学大学生求职信
2013/11/13 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
心灵点滴观后感
2015/06/02 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
python基础详解之if循环语句
2021/04/24 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript