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 相关文章推荐
windows下PHP APACHE MYSQ完整配置
Jan 02 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
解析php如何将日志写进syslog
Jun 28 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
thinkphp缓存技术详解
Dec 09 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
PHP 微信支付类 demo
Nov 30 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
如何在PHP中使用Oracle数据库(6)
2006/10/09 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
python二分查找算法的递归实现方法
2016/05/12 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
党支部公开承诺书
2014/03/28 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
安全员岗位职责
2015/02/10 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书