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

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

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

操作流程如下:

  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(同上文的随机字符串)。

image

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开发微信支付获取用户地址相关推荐

  1. 微信h5获取用户地址信息

    微信h5页面获取用户地址信息(vue+Java)(清风竹语) 前言: 与之前获取用户信息相同,这次获取用户地址信息也是在用户进入该页面之后,通过取得用户经纬度,在调用高德地图的api获得位置信息. 流 ...

  2. 微信小程序开发-微信支付功能【WxMaService 获取openid,WxPayService建微信订单,接收微信支付异步通知回调方法,附有完整前后端代码】

    前提:对小程序开发有一定的基础:小程序已发布使用,已开通微信支付,关联商户号. 微信小程序平台:小程序平台 微信开发者文档:开发者文档 微信小程序支付API 地址:微信支付文档地址 微信支付平台:微信 ...

  3. 微信jsapi获取用户地理位置接口开发(第八课)

    本章节给大家介绍通过微信jsapi获取用户的地理位置,微信官方文档关于地理位置给了两种接口,一种是通过微信内置地图查看用户的地理位置,第二种是直接获取当前用户的地理位置坐标信息. 使用微信内置地图查看 ...

  4. 微信小程序中处理 获取用户地址的回调

    handleChooseAddress () {// 选择用户地址,初次调用该方法会弹出授权窗口,授权信息会被保存到 scope.address 属性中// 如果用户点击的是[取消],scope.ad ...

  5. 如何使用easywechat开发微信支付功能

    easywechat是神一样的存在.非常好用.希望大家都能转到这上面来. 用easywechat来开发微信支付功能,步骤如下: 一,需要有一个商品下单页面,页面上有你的商品的信息,还要有购买数量,和一 ...

  6. 小程序云开发 ——微信支付

    云开发的微信支付:免鉴权.免签名计算.免 access_token,在云函数内原生调用微信支付接口.以前的实现微信支付,必须要有自己的服务器,有自己的备案域名,还有后端部分代码 云开发-微信支付,官方 ...

  7. php 工商银行公众号支付代码_php开发微信支付企业付款实例代码

    企业付款的应用场景: 公众号向已关注用户付款,比如处理退款.财务结算等,本文主要和大家分享php开发微信支付企业付款实例代码,希望能帮助到大家. 说明 1.证书需要用自己的商户里面的证书(注意:证书路 ...

  8. springboot快速开发微信支付

    springboot快速开发微信支付 1. POM文件添加依赖 <properties><wechat.sdk.version>3.3.7.B</wechat.sdk.v ...

  9. 微信小程序云开发微信支付、订单查询、申请退款

    微信小程序云开发微信支付 使用云开发微信支付功能的前提 统一下单 查询订单 申请退款 常见问题总结: 使用云开发微信支付功能的前提 小程序主体为企业或者工商个体户 小程序完成了微信认证 小程序接入微信 ...

最新文章

  1. perf + 火焰图分析程序性能
  2. YOLOv5-Lite 详解教程 | 嚼碎所有原理、训练自己数据集、TensorRT部署落地应有尽有...
  3. linux 内核 call,在Linux Kernel內新增一个System Call(转)
  4. 百度CES大秀,Apollo2.0与DuerOS新产品背后的百度开放新姿态
  5. android p新功能_android 11今天发布这是新功能
  6. tomcat(15)Digester库
  7. turtlebot3入门教程
  8. idea菜单栏消失如何调整回来
  9. 专题导读:大数据异构并行系统
  10. 实验7-3-4 字符串替换 (15 分)
  11. 推荐30款最佳的数据可视化工具
  12. os.path.join()函数
  13. 三言两语聊Python模块–文档测试模块doctest
  14. python的快捷键总结
  15. java读取tif文件_java读取TIF,TIFF文件方法
  16. 把两个pdf合并成一个如何解决?
  17. arduino安装+esp32+esp8266安装
  18. MP4视频文件过大如何压缩?压缩视频的方法是什么?
  19. C++中pow()函数
  20. 电脑计算机怎么用键盘计算,电脑计算器还能这么用?

热门文章

  1. http request乱码的真相
  2. Spring - Java/J2EE Application Framework 应用框架 第 12 章 Web框架
  3. LaTeX文档插入图片的几种常用方法
  4. 数据分类:决策树Decision Tree
  5. 简明 Python 编程规范v2
  6. 在线教育这条取经路,有道词典何时能修成正果?
  7. 普及移动办公大业,促进数字转型升级——中国移动办公专家顾问团即将盛大亮相...
  8. 五分钟重温斐波那契数列
  9. oracle如何清空一个用户下的所有表中的数据?
  10. 图像处理之log---log算子