微信支付之获取openid

本文详细介绍如何通过微信网页授权接口获取用户的OpenID,包括设置域名、获取code、使用code交换OpenID等步骤,适用于初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、准备工具

不管开发什么,官方的文档应该是第一个想到的这里把官方文档贴出来:微信网页授权文档
除此之外,我们还需要一个内网穿透的工具在开发环境下让微信能访问到我们的域名。我使用的是natapp。此类工具网上有很多,大家可以自行寻找。
这里我们使用微信提供的测试账号来作为演示

 

二、开始开发

内网穿透就不在这里演示了,下面我们直入主题:
1.填写网页授权域名
在这篇文档的一开始就埋了一个坑

 

 这段话就是说,我们在开发前需要在图片中框红的位置填入我们所要开发的域名。这里我们使用的是测试环境,所以需要在测试账号管理页面的这个位置填入我们自己的域名,这里要注意填入域名的规则。

 

 

 2.文档阅读
接着阅读文档我们可以发现网页授权有两种scope,
snsapi_base和snsapi_userinfo。两种scope都可以获取到opeid,不同的是snsapi_userinfo除了openid外还可以获取到用户的基本信息,但是需要用户手动进行确认。
再往下阅读我们可以看到官方文档的授权步骤

 

  • 第一步:用户同意授权,获取code
  • 第二步:通过code换取网页授权access_token以及openid
  • 第三步:刷新access_token(如果需要)
  • 第四步:拉取用户信息(需scope为 snsapi_userinfo)

我们只需要openid,所以我们只开发到第二步就好了。下面我们就按着官方步骤来开发。

3.获取code
查看文档后我们发现我们需要拼接一个url并且访问它。url的参数文档中写的很清楚了。看他的例子也能看个清楚。这里比较重要的是redirect_uri。这个参数所填的是一个链接。我们访问url后会自动转发到这个链接并且将我们需要的code以及拼接url中的state的值作为参数。这个redirect_uri的值要填入的是我们代码中的controller的位置。
所以这里我们需要一段代码:

 

@RestController
@RequestMapping("/weixin")
@Slf4j
public class WeixinController {

    @GetMapping("/auth")
    public void auth(@RequestParam("code") String code,@RequestParam("state") String state){
        log.info("auth开始了。。。。");
        log.info("code={}",code);
        log.info("state={}",state);
    }
}

我拼接的url,这里大家要注意根据自己的情况进行拼接。拼接成功后需要在微信app中进行访问

https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=http://xxx/sell/weixin/auth&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

访问后的结果

 

 这样我们就拿到了code
4.获取openid
继续查看文档,发现我们只需要使用获取到的code再访问另一个url就可以获取到我们想要的了。接着上面的代码

@RestController
@RequestMapping("/weixin")
@Slf4j
public class WeixinController {

    @GetMapping("/auth")
    public void auth(@RequestParam("code") String code,@RequestParam("state") String state){
        log.info("auth开始了。。。。");
        log.info("code={}",code);
        log.info("state={}",state);
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=xxxx&secret=xxxx&code="+code+"&grant_type=authorization_code";
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject(url, String.class);
        log.info("result={}",result);
    }
}

这时我们再次访问第三步拼接的url就可以看到如下结果。

 

 将结果格式化一下我们可以就看到我们想要的openid

 

 

三、总结

流程看起来还是很简单的。但以上只是一个最简单、最直接的手工获取openid的例子。真正在使用过程中需要结合自身的业务流程来进行开发,这时可能就有些麻烦了。此时我们也可以借助一些网上第三方sdk来开发。例如:weixin-java-tools。

这个总结的比较模糊,没有直接了当的总结出来获取openid的方法,但是,如果你忘记的话,这个可以让你快速捡起来.

转载于:https://www.cnblogs.com/qingmuchuanqi48/p/11627940.html

### 获取微信支付中的OpenID微信支付集成过程中,获取用户的`openid`是一个重要的前置条件。为了成功发起支付请求并关联到具体的用户账户,开发者需要通过OAuth2.0授权接口来获得此标识符。 #### OAuth2.0 授权模式概述 根据官方文档说明,在Android应用环境中想要取得用户的`openid`,通常采用的是OAuth2.0授权码模式[^4]。该过程涉及到了一系列交互操作: 1. 用户同意授权后,服务器端会返回code参数给回调地址; 2. 应用程序利用这个临时性的code向微信服务器换取access_token以及对应的openId信息。 #### 实现步骤解析 具体来说,在应用程序启动时可以通过如下代码片段完成初步配置,并引导用户进入授权页面: ```java // 导入必要的包 import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.WXAPIFactory; public class MainActivity extends AppCompatActivity { private IWXAPI api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 创建IWXAPI实例 api = WXAPIFactory.createWXAPI(this, "YOUR_APP_ID", false); // 将当前app注册到微信 api.registerApp("YOUR_APP_ID"); // 构建发送至微信的请求对象 SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; // 请求用户个人信息权限 req.state = "wechat_sdk_demo_test"; // 发送请求 api.sendReq(req); } } ``` 当用户确认授权之后,系统将会跳转回指定的应用内页面,并携带上一步骤中提到的`code`作为查询字符串的一部分传递回来。此时可以在重定向后的Activity里处理这些数据,进而调用微信提供的开放接口去交换所需的`openid`和其他资料。 需要注意的是,上述示例仅展示了基本框架结构,实际开发还需要考虑异常情况下的错误处理逻辑、安全性验证等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值