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类
Apr 09 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
redis 队列操作的例子(php)
Apr 12 PHP
PHP 自定义错误处理函数的使用详解
May 10 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
php文件上传类完整实例
May 14 PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
PHP中echo与print区别点整理
Mar 09 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删除HTMl标签的实现代码
2013/06/30 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
解决Django中多条件查询的问题
2019/07/18 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
python实现学生管理系统开发
2020/07/24 Python
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
一份报关员的职业规划范文
2014/01/08 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
Java 定时任务技术趋势简介
2022/05/04 Java/Android