当前位置: 首页 > article >正文

微信native支付对接

简介

Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。

应用场景

Native支付适用于PC网站、实体店单品或订单、媒体广告支付等场景,用户扫描商户展示在各种场景的二维码进行支付。聚体步骤如下:

1.商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买
2.用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付。
3.用户确认支付,输入支付密码
4.支付完成后会提示用户支付成功,商户后台得到支付成功的通知,然后进行发货处理

接入前准备

直接跳转微信支付商户平台 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_7_1.shtml

生成密钥文件:
在这里插入图片描述

配置文件:

wx:
  appId: appId
  keyPath: apiclient_key.pem
  certPath: apiclient_cert.pem
  certP12Path: 暂不用
  platformCertPath: platform_cert.pem
  mchId: mchId
  apiKey3: 暂不用
  apiKey: apiKey
  domain: https://hous.exchang.cn
  serialNo: 序列号

pom文件:

<dependency>
     <groupId>com.github.wechatpay-apiv3</groupId>
     <artifactId>wechatpay-java</artifactId>
     <version>0.2.2</version>
 </dependency>

代码:

配置类:

//获取yml中微信配置
@Data
@ConfigurationProperties(prefix = "wx")
public class WechatProperties {
   

    private String appId;

    private String keyPath;

    private String certPath;

    private String platformCertPath;

    private String mchId;

    private String apiKey;

    private String domain;

    private String serialNo;
}
//配置类
@Configuration
@EnableConfigurationProperties(WechatProperties.class)
public class WechatNativeConfig {
   


    private final WechatProperties wechatProperties;

    public WechatNativeConfig(WechatProperties wechatProperties) {
   
        this.wechatProperties = wechatProperties;
    }

    @Bean
    public RSAConfig rsaConfig() throws IOException {
   
        ClassPathResource keyResource = new ClassPathResource(wechatProperties.getKeyPath());
        String apiClientKey = keyResource.getFile().getPath();
        ClassPathResource certResource = new ClassPathResource(wechatProperties.getPlatformCertPath());
        String platformCertResourceKey = certResource.getFile().getPath();
        /*String apiClientKey = wechatProperties.getKeyPath();
//        ClassPathResource certResource = new ClassPathResource(wechatProperties.getPlatformCertPath());
        String platformCertResourceKey = wechatProperties.getPlatformCertPath();*/
        return new RSAConfig.Builder()
                .merchantId(wechatProperties.getMchId())
                .privateKeyFromPath(apiClientKey)
                .merchantSerialNumber(wechatProperties.getSerialNo())
                //平台证书
                .wechatPayCertificatesFromPath(platformCertResourceKey)
                .build();
    }

    @Bean
    public NativePayService nativePayService() throws IOException {
   
        return new NativePayService.Builder()
                .config(this.rsaConfig())
                .build();
    }

    @Bean
    public NotificationParser notificationParser() throws IOException{
   
        ClassPathResource certResource = new ClassPathResource(wechatProperties.getPlatformCertPath());
        String platformCertResourceKey = certResource.getFile().getPath();
        //String platformCertResourceKey = wechatProperties.getPlatformCertPath();
        NotificationConfig config = new RSANotificationConfig.Builder()
                .apiV3Key(wechatProperties.getApiKey())
                .certificatesFromPath(platformCertResourceKey)
                .build();
        // 初始化 NotificationParser
        return new NotificationParser(config);

    }

    @Bean
    public RefundService refundService() throws IOException {
   
        return new RefundService.Builder().config(this.rsaConfig()).build();
    }

}

创建支付单:

	@Slf4j
@Service
@EnableConfigurationProperties(WechatProperties.class)
public class WechatNativePayServiceImpl implements BasePayService {
   

    @Resource
    private WechatProperties wechatProperties;

    @Resource
    private NativePayService nativePayService;

    @Resource
    private RedisCache redisCache;

    @Value("${spring.application.name:scm-ofc-system}")
    private String serviceName;


    @Override

http://www.kler.cn/a/105987.html

相关文章:

  • arkUI:网格布局(Grid)
  • UE5 材质里面画圆锯齿严重的问题
  • IDEA旗舰版编辑器器快速⼊门(笔记)
  • 微信小程序-prettier 格式化
  • Vulnhub靶场案例渗透[9]- HackableIII
  • Failed to create a temp file - Jenkins 无法创建任务
  • 计算机网络-应用层(2)
  • V8 引擎中的垃圾收集器
  • 202212 青少年等级考试机器人实操真题六级试卷
  • 全自动洗衣机什么牌子好?迷你洗衣机品牌推荐
  • 在PowerBI中提取IFC文件中的数据
  • [Hive] 常见函数
  • BUUCTF刷题记录
  • echarts将展示全天的数据,如一天的电费,一个停车场一天的饱和度等问题
  • Qt中的单例模式
  • 游戏研发的解决方案有哪些?
  • onclick事件的用法
  • uni-app:实现picker下拉列表的默认值设置
  • kafka丢数据的原因
  • Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)
  • 【Python · PyTorch】数据基础
  • 如何进行渗透测试以提高软件安全性?
  • Java可重复注解接口(Repeatable Annotation Interfaces)
  • 软件测试肖sir__python之ui自动化测试框架作业案例
  • 关于接口|常见电商API接口种类|接口数据类型|接口请求方法
  • OpenText 安全取证软件——降低成本和风险的同时,简化电子取证流程