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

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

http://mp.weixin.qq.com/s/uNpWE_Z5RZ48PDIWkmGBYQ

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

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

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

 

操作流程如下:

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

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

 

3.在前端页面,使用下面的js函数来完成获取用户地址的操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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(
"获取地址失败,请重新点击"
); } }); }

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113582.html原文链接:https://javaforall.net

(0)
上一篇 2021年10月15日 下午4:00
下一篇 2021年10月15日 下午5:00


相关推荐

  • Vue 实例

    Vue 实例创建一个 Vue 实例每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的 varvm newVue 选项 虽然没有完全遵循 MVVM 模型 但是 Vue 的设计也受到了它的启发 因此在文档中经常会使用 vm ViewModel 的缩写 这个变量名表示 Vue 实例 当创建一个 Vue 实例时 你可以传入一个选项对象 这篇教程主要描述的就是如何使用这些选项来创建你想要的行为 作为参考 你也可以在 API 文档中浏览完整的选项列表

    2026年3月18日
    2
  • PPT 中插入域代码公式的方法

    PPT 中插入域代码公式的方法PPT中插入域代码公式的方法插入对象,选择Word*Document,或OpenDocument都可以; 在新打开的页面中,选择插入文档部件,再选择域代码; 在域代码选项中,选择Eq,具体语法如下。域代码:Eq(公式)域注意:我们希望能够尽快以你的语言为你提供最新的帮助内容。本页面是自动翻译的,可能包含语法错误或不准确之处。我们的目的是使此内容能对你有所帮助。可以在本页面底部告诉我们此信息是否对你有帮助吗?请在此处查看本文的英文版本以…

    2022年6月1日
    235
  • String类型数字与Integer最大值比较[通俗易懂]

    String类型数字与Integer最大值比较[通俗易懂]将String类型数字转为Integer类型时需要先判断范围是否超过Integer最大值,否则会报异常/***与最大值比较,大于返回1,等于返回0,小于返回-1*@paramval*@return*/publicintcomparetoMaxInt(Stringval){BigDecimalbd=newBigDecimal(val);BigDecimalmaxInt=ne

    2025年10月6日
    7
  • python(8)—- pyltp5个核心函数

    python(8)—- pyltp5个核心函数1 简介 LTP 语言技术平台 是哈工大社会计算与信息检索研究中心研制的一整套开放中文自然语言处理系统 pyltp 是 LTP 的 python 封装 提供了分词 词性标注 命名实体识别 依存句法分析 语义角色标注的功能 暂不提供语义依存分析功能 2 各个模型功能 1 分词 cws model 2 词性标注 pos model 3

    2026年3月17日
    2
  • sd卡插拔

    sd卡插拔android/frameworks/base/core/java/android/os/storage/VolumeInfo.java:128:sEnvironmentToBroadcast.put(Environment.MEDIA_UNMOUNTED,Intent.ACTION_MEDIA_UNMOUNTED);android/frameworks/b…

    2022年5月30日
    105
  • Threading(in thread main)

    PainlessThreadingThisarticlediscussesthethreadingmodelusedbyAndroidapplicationsandhowapplicationscanensurebestUIperformancebyspawningworkerthreadstohandlelong-runningoperat

    2022年4月15日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号