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 网页过期时间的控制代码
Jun 29 PHP
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 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实现的日历程序
2015/06/18 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
php压缩文件夹最新版
2018/07/18 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
Python返回数组/List长度的实例
2018/06/23 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Python原始套接字编程实例解析
2020/01/29 Python
python+OpenCV实现图像拼接
2020/03/05 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
大学同学聚会邀请函
2014/01/29 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers