php开发微信支付获取用户地址

 更新时间:2015年10月04日 14:11:45   投稿:hebedich  
微信支付的收货地址共享功能,主要是统一的管理微信用户个人的收货地址,其收货地址可以被应用于所有可以调用的开发者。用户的收货地址包含了很多个人信息,因此该接口必须要通过申请,申请的方式可以在mp平台上查看到。

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

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

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

操作流程如下:

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位随机字符串&timestamp=时间戳&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>&nbsp;&nbsp; <b>"+res.telNumber+"</b><br /> 收货地址:"+res.proviceFirstStageName+res.addressCitySecondStageName+res.addressCountiesThirdStageName+res.addressDetailInfo;
      
 } else{ alert("获取地址失败,请重新点击"); } }); }

至此,使用微信获取用户共享地址的开发就完毕了。

相关文章

  • php通用防注入程序 推荐

    php通用防注入程序 推荐

    今天做完了整个php项目,想来安全问题不少,开发程序的过程中无心过滤参数。所以注入少不了,才有了下面的防注入程序.
    2011-02-02
  • PHP借助phpmailer发送邮件

    PHP借助phpmailer发送邮件

    phpmailer是一款免费的php邮件发送插件,我们可以利用phpmailer登录到我们指定的邮件然后再利用这个邮件给我们自动发邮件了,这个现在免费的邮箱像163,sina都支持,好了费话不说多了来看看一段phpmainer 163邮件发送邮件吧。
    2015-05-05
  • php cURL和Rolling cURL并发方式比较

    php cURL和Rolling cURL并发方式比较

    在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发。
    2013-10-10
  • PHP实现清除wordpress里恶意代码

    PHP实现清除wordpress里恶意代码

    这篇文章主要介绍了PHP实现清除wordpress里恶意代码的方法以及相关代码和使用方法,有需要的小伙伴可以参考下。
    2015-10-10
  • PHP 访问数据库配置通用方法(json)

    PHP 访问数据库配置通用方法(json)

    目的是通过通用类访问配置文件的方式,提供对数据库连接的动态获取和设置,使开发时和生产应用时都能够提供灵活的、简化的、解耦的操作方式,需要的朋友可以参考下
    2018-05-05
  • 理解PHP中的Session及对Session有效期的控制

    理解PHP中的Session及对Session有效期的控制

    这篇文章主要介绍了理解PHP中的Session及对Session有效期的控制,Session默认有效期为1440秒而后则会用到PHP的垃圾回收,需要的朋友可以参考下
    2016-01-01
  • php 函数使用可变数量的参数方法

    php 函数使用可变数量的参数方法

    下面小编就为大家带来一篇php 函数使用可变数量的参数方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • PHP exif扩展方法开启详解

    PHP exif扩展方法开启详解

    本节主要介绍了如何开启PHP exif扩展方法,主要在于对php.ini文件的修改
    2014-07-07
  • PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\

    PHP Warning: PHP Startup: Unable to load dynamic library \ D

    今天在家启动PHP环境的时候,突然发现不能加载php_mysqli.dll了,网上找了一圈,没有解决方案!在群里面受一哥们儿的启发,竟然解决了,如果你的问题还没有解决,请按下面的方法试试
    2012-06-06
  • php获取文件大小的方法

    php获取文件大小的方法

    这篇文章主要介绍了php获取文件大小的方法,需要的朋友可以参考下
    2014-02-02

最新评论