使用binary-wang开发微信小程序的登录和微信支付

这篇具有很好参考价值的文章主要介绍了使用binary-wang开发微信小程序的登录和微信支付。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


贴个官网,建议down下来他的源码,对照着开发更方便,因为备注很详尽。

其它不多废话了,我直接写步骤了。


1. Maven引入

时间2023年5月,目前最新版本是4.5.0

		<dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>4.5.0</version>
        </dependency>
        <dependency>
      		<groupId>com.github.binarywang</groupId>
      		<artifactId>weixin-java-pay</artifactId>
      		<version>4.5.0</version>
    	</dependency>

2. 微信小程序参数配置

考虑到多微信小程序和微信支付多商户的问题,我们的配置将会是以集合的形式存在

2.1 propertie格式
wx.mini.configs[0].appid:wx0123948575
wx.mini.configs[0].secret:4023c4f58d704d9
wx.mini.configs[1].appid:wx01239485jo
wx.mini.configs[1].secret:4023c4f58d

每组的配置项以类似下标的形式区分开

2.2 yaml格式
wx:
  mini:
    	login:
    		configs:
      			- appid: wx02792790
        		  secret: 4023c4f58d704d9
        pay:
        	configs:
        		- mchId: xxxxx

" - " 后面表示一组数据, 登录和支付的必传参数,自己补全吧
yaml的格式应该是有问题的,各位自己注意下就好

3. 类

3.1 Properties对应的对象
@Data
@ConfigurationProperties(prefix = "wx.mini.login")
public class WxMpLoginProperties {
    private List<Config> configs;
    @Data
    public static class Config {
        /**
         * 设置微信小程序的appid
         */
        private String appid;

        /**
         * 设置微信小程序的Secret
         */
        private String secret;

        /**
         * 设置微信小程序消息服务器配置的token
         */
        private String token;

        /**
         * 设置微信小程序消息服务器配置的EncodingAESKey
         */
        private String aesKey;

        /**
         * 消息格式,XML或者JSON
         */
        private String msgDataFormat;
    }
}
@Data
@ConfigurationProperties(prefix = "wx.mini.pay")
public class WxMpPayProperties {
private List<Config> configs;
@Data
public static class Config {
    private String mchId;
    private String wxApiV3Key;
    private String notify_url;
    /**
     * 证书-序列号
     * 1D685BC1A16B008C7714E3A255C9408607D1738C
     */
    private String mchSerialNo;
    /**
     * https://api.mch.weixin.qq.com/v3/certificates
     */
    private String v3CertUrl;
    /**
     * 证书所在服务器位置 如 /payment/yfyxs/apiclient_key.pem
     */
    private String keyPath;
    /**
     * apiclient_key.pem证书文件的内容
     */
    private String apiClientKey;
    /**
     * apiclient_cert.pem证书文件的内容
     */
    private String apiClientCert;
    /**
     * 商户签名使用 商户私钥 ,证书序列号包含在请求HTTP头部的  Authorization的serial_no
     * 微信支付签名使用微信支付平台私钥,证书序列号包含在应答HTTP头部的Wechatpay-Serial
     * 商户上送敏感信息时使用微信支付平台公钥加密,证书序列号包含在请求HTTP头部的 Wechatpay-Serial
     */
}
}

这2个类编写完之后@ConfigurationProperties会报错,但是先不要管它。

3.2 WxMpConfig
@Slf4j
@Configuration
@EnableConfigurationProperties({WxMpLoginProperties.class,WxMpPayProperties.class})
public class WxMpConfig {

    private final WxMpLoginProperties loginProperties;
	private final WxMpPayProperties payProperties;
    public WxMpConfig(WxMpLoginProperties loginProperties, WxMpPayProperties payProperties) {
        this.loginProperties = loginProperties;
        this.payProperties = payProperties;
    }

    /**
     * 与微信小程序有关的总service
     * @return WxMaService
     */
    @Bean
    public WxMaService wxMaService() {
        List<WxMpLoginProperties.Config> configs = this.loginProperties.getConfigs();
        if (configs == null) {
            throw new ApiException("没有微信小程序配置啊");
        }
        WxMaServiceImpl maService = new WxMaServiceImpl();
        Map<String, WxMaDefaultConfigImpl> multiConfigs = configs.stream()
                .map(cof -> {
                    WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
                    config.setAppid(cof.getAppid());
                    config.setSecret(cof.getSecret());
                    config.setToken(cof.getToken());
                    config.setAesKey(cof.getAesKey());
                    config.setMsgDataFormat(cof.getMsgDataFormat());
                    return config;
                })
                .collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, Function.identity(), (o, n) -> o));
        maService.setMultiConfigs(multiConfigs);
        return maService;
    }

  @Bean
    public WxPayService wxPayService() {
        List<WxMpPayProperties.Config> configs = this.payProperties.getConfigs();
        if (configs == null) {
            throw new ApiException("没有微信小程序配置啊");
        }
      	WxPayService wxPayService = new WxPayServiceImpl();
        this.payProperties.getConfigs().stream().forEach(merchant -> {
      		WxPayConfig payConfig = new WxPayConfig();
      		payConfig.setMchId(merchant.getMchId());
      		payConfig.setCertSerialNo(merchant.getMchSerialNo());
     	 	payConfig.setApiV3Key(merchant.getWxApiV3Key());
      		payConfig.setPrivateKeyContent(merchant.getApiClientKey().getBytes());
      		payConfig.setPrivateCertContent(merchant.getApiClientCert().getBytes());
      		wxPayService.addConfig(merchant.getMchId(), payConfig);
      		// 可以指定是否使用沙箱环境
      		payConfig.setUseSandboxEnv(false);
    });
    return wxPayService;
    }
    
}

到目前为止我们的准备工作就做完了。剩下的就是业务逻辑代码的开发了。

4. 业务代码编写

4.1 登录的code2session demo

具体的完整的微信登录流程不会写在这里,我们只是看下如果使用binary-wang给我们封装的接口(再强调下,只是demo所以整体无关规范问题,在此service层不面向接口编程)

@Service
@Slf4j
public class WeiXinLoginDemoService {
	@Autowired
    private WxMaService wxMaService;
    
	public void weixinCode2SessionDemo(String appId) {
		if (!wxMaService.switchover(appId)) {
            throw new ApiException(String.format("未找到对应appid=[%s]的配置,请核		实!", appId));
        }
        //code 2 session
		WxMaJscode2SessionResult jscode2SessionResult = wxMaService.getUserService().getSessionInfo(wcp.getCode());
		log.info("result:{}", jscode2SessionResult.toString());
	}
}

4.2 微信支付demo

具体的微信支付逻辑这里也不会写,只是告诉你用binary-wang做微信支付的话我们需要准备什么东西。

@Service
@Slf4j
public class WeiXinPayDemoService {
	@Autowired
    private WxPayService wxPayService;
    /**
    * 统一下单demo
    **/
	public void weixinUnifiedOrderV3Demo(String mchId) {
		if (!wxPayService.switchover(mchId)) {
            throw new ApiException(String.format("未找到对应mchid=[%s]的配置,请核		实!", mchId));
        }
        //调用统一下单接口,WxPayUnifiedOrderV3Request具体需要的逻辑参数需要参考官方文档,但是我们阅读unifiedOrderV3这个接口的源码
        //就能知道appId mchId 以及url都不需要我们传入,我们只要传具体的业务参数即可比如贵司生成的orderId
		WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = wxPayService.unifiedOrderV3(TradeTypeEnum.H5, new WxPayUnifiedOrderV3Request());
		log.info("result:{}", wxPayUnifiedOrderV3Result.toString());
	}
}

以上差不多了。有错误的话,感谢指出。有问题的话,共同讨论。文章来源地址https://www.toymoban.com/news/detail-444226.html

到了这里,关于使用binary-wang开发微信小程序的登录和微信支付的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp开发微信小程序的登录功能实现

    小程序的登录是必不可少的,那我们如何去实现这个功能呢 1.首先我们是需要去 调用uni.getUserProfile()去获取用户信息的 ,得到一些登录接口相关的一些数据 2.再去 调用uni.login()这个api去获取code字段 3.结合以上这两个api获取的一些数据组合成接口所需要的参数,然后通过调

    2024年02月15日
    浏览(37)
  • uniapp开发微信小程序登录获取openid并解决code无效问题:invalid code

    场景: 实现微信支付的时候需要获取到openid,openid需要在登录的时候用登录返回的code获取 1.登录获取 code ,用code获取 openid 解决方法: 报错code无效:invalid code: 1.先在微信小程序管理平台找到APPID,这里的 https://mp.weixin.qq.com/wxamp/devprofile ; 2.检查项目的project.config.json的APP

    2024年02月11日
    浏览(42)
  • 使用Appium 测试微信小程序和微信公众号方法

    由于腾讯系QQ、微信等都是基于腾讯自研X5内核,不是google原生webview,需要打开TBS内核Inspector调试功能才能用Chrome浏览器查看页面元素,并实现Appium自动化测试微信小程序和微信公众号。 前提条件Appium环境搭建,这里不多说了,可查阅Appium环境搭建文章。 因夜神等模拟器是

    2024年02月13日
    浏览(23)
  • 如何使用vscode开发微信小程序

    在vscode安装以下几个插件,再将微信小程序的项目导入即可进行小程序开发。vscode只能编辑代码,效果还需要在微信开发者工具中查看。插件安装完成之后,文件就能和微信小程序运行效果同步,调试等还需要在微信开发者工具中进行。

    2024年02月07日
    浏览(23)
  • uniapp开发微信小程序使用高德地图

    uniapp  官方文档 地图组件控制  地图组件 高德地图key需要公司去申请,之后自己在下载高德地图微信小程序插件 下好的js文件放在项目中,之后在vue项目中的main.js文件中全局注入 页面引入并使用

    2024年02月15日
    浏览(75)
  • 使用base64加密解密的多种方法:包含pc端和微信小程序

    1、pc端 Window 对象 Window 对象表示浏览器中打开的窗口。 平常在开发pc端浏览器的时候。如果要加密或者解密成为一个 base-64 编码的字符串。我们都可以使用Window 对象里的对象方法: atob() 解码一个 base-64 编码的字符串。 btoa() 创建一个 base-64 编码的字符串 我们可以直接在浏览

    2024年02月15日
    浏览(32)
  • 开发微信小程序使用原生开发还是uniapp开发

    大家好,我是蔓云科技的小蔓(写代码的平面师)。 今天给大家带来一门知识普及课,开发小程序使用原生还是uniapp,如果你想开发一款小程序,通过这个视频你会得到答案。 相信大家对小程序都不陌生吧,在生活的方方面面中都有它的身影,比如:社区团购、商城购物、

    2024年02月17日
    浏览(32)
  • 如何使用uni-app开发微信小程序

    uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码,可发布到 iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。 详细的 uni-app 官方文档,请翻阅https://uniapp.dcloud.net.cn uni-app 官方推荐使用 HBuilderX 来开发 uni-ap

    2024年02月10日
    浏览(102)
  • 使用uniapp开发微信小程序的微信支付流程

    在我们做一些购物车的结算功能时是一定会有支付功能的,那我们如何去做微信支付这个功能呢,首先我们先要理清思路,并且要了解到接口需要哪些数据以及会返回哪些数据 注意:一定要先看接口文档! 创建订单。 ○ 请求创建订单的 API 接口:把(订单金额、收货地址、

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包