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 采集书并合成txt格式的实现代码
Mar 01 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
php生成扇形比例图实例
Nov 06 PHP
浅谈php函数serialize()与unserialize()的使用方法
Aug 19 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
PHP自毁程序(慎用)
Jul 09 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
php JWT在web端中的使用方法教程
Sep 06 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学习之PHP运算符
2006/10/09 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
浅析javascript 定时器
2014/12/23 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python KMeans聚类问题分析
2018/02/23 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
简单了解Python生成器是什么
2019/07/02 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Python常用类型转换实现代码实例
2020/07/28 Python
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
就业推荐自我鉴定
2013/10/06 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
单位未婚证明范本
2014/11/25 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL