超详细接入微信支付、支付宝支付 - 微信公众号支付

相关文章

1、介绍

微信有多种支付产品,如付款码支付、公众号支付、H5 支付、小程序支付、Native 支付、APP 支付等。其中公众号支付、小程序支付最为常用。
微信官方产品介绍

微信支付接入有两种模式:

  • 直联模式:对接微信官方接口
  • 间联模式:通过第三方支付公司,费率低、支持灵活结算。

直联模式、间联模式详细介绍

2、微信直联接入准备

2.1、域名

准备一个域名,必须要有 https 证书,并且 icp 备案了。

2.2、微信公众号
  1. 申请微信公众号
    公众号分为服务号与订阅号。一定要申请服务号,订阅号不支持支付,个人不支持申请服务号。

    (企业)注册公众平台步骤
    (个体户)注册公众平台步骤

  2. 微信认证
    微信公众号需要微信认证,才能使用支付相关的功能。微信认证服务审核费300元/次/年。

    什么是微信认证流程
    微信认证申请流程(企业类型)
    微信认证申请流程(个体工商户)

  3. 获取AppId与AppSecret
    AppId、AppSecret为微信公众号的开发者ID与密钥,获取微信openId需要用到。

    AppID及其主体信息查询方法

  4. 配置网页授权域名

    获取微信openId需要配置网页授权域名。

  • 开发者需要先到公众平台官网中的 设置与开发 => 公众号设置 => 功能设置 => 网页授权域名 的配置选项中,修改网页授权域名;

  • 填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

  • 授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.comhttp://music.qq.comhttp://qq.com 无法进行OAuth2.0鉴权。

    如何配置下载文件,可参考此链接 微信公众号网页授权域名设置

2.3、微信商户
2.3.1、申请微信商户

​ 接入微信支付,需要申请一个微信商户。

申请微信商户

2.3.2、设置支付授权目录
  1. 支付授权目录说明
  • 普通商户最后请求拉起微信支付收银台的页面地址我们称之为“支付授权目录”,例如:https://www.weixin.com/pay.php的支付授权目录为:https://www.weixin.com/

  • 普通商户实际的支付授权目录必须和在微信支付商户平台设置的一致,否则会报错“当前页面的URL未注册:”。

  1. 支付授权目录设置说明
    登录【微信支付商户平台—>产品中心—>开发配置】,设置后一般5分钟内生效。

  2. 支付授权目录校验规则说明

  • 如果支付授权目录设置为顶级域名(例如:https://www.weixin.com/ ),那么只校验顶级域名,不校验后缀;
  • 如果支付授权目录设置为多级目录,就会进行全匹配,例如设置支付授权目录为 https://www.weixin.com/abc/123/,则实际请求页面目录不能为https://www.weixin.com/abc/,也不能为https://www.weixin.com/abc/123/pay/,必须为https://www.weixin.com/abc/123/

3、微信直联技术对接

业务流程图

重点步骤说明:

步骤3 用户下单发起支付,商户可通过 JSAPI下单 创建支付订单。

步骤8 商户可在微信浏览器内通过 JSAPI调起支付API 调起微信支付,发起支付请求。

步骤15 用户支付成功后,商户可接收到微信支付支付结果通知支付结果通知API

步骤20 商户在没有接收到微信支付结果通知的情况下需要主动调用查询订单API 查询支付结果。

微信官方开发指引

微信官方SDK

4、获取微信用户OpenID

微信公众号获取OpenID

5、Java接入

5.1、java demo下载(包含直联、间联)

gitee
github

5.1、微信直联Java代码

这里只提供下单的测试代码,订单查询、退款、回调等相关代码,请查看java demo。

5.1.1、maven引用
<dependency>
    <groupId>com.github.wechatpay-apiv3</groupId>
    <artifactId>wechatpay-java</artifactId>
    <version>0.2.15</version>
</dependency>
5.1.2、测试类
import com.alibaba.fastjson.JSON;
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAPublicKeyConfig;
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.Amount;
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse;
import org.junit.Test;

/**
 * 微信直联测试
 */
public class WechatDirectTest {

    //微信JSAPI测试
    @Test
    public void jsapi(){
        Config config = getWechatConfig();

        // 构建service
        JsapiServiceExtension service = new JsapiServiceExtension.Builder().config(config).build();
        PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        //金额转分
        amount.setTotal(1);
        request.setAmount(amount);
        request.setAppid("公众号或小程序appId");

        Payer payer = new Payer();
        payer.setOpenid("用户openId");
        request.setPayer(payer);

        request.setMchid("微信商户号");

        // 设置订单标题
        request.setDescription("测试");
        // 设置商户订单号
        request.setOutTradeNo(System.currentTimeMillis() + "");

        String label = "微信-JSAPI下单接口";

        try {
            System.out.println(label + " 请求参数:" +  JSON.toJSONString(request));

            // 调用下单方法,得到应答
            PrepayWithRequestPaymentResponse response = service.prepayWithRequestPayment(request);
            System.out.println(label + " 返回参数:" +  JSON.toJSONString(response));
        } catch (Exception e) { // 发送HTTP请求失败
            System.err.println(e);
        }
    }

    /**
     * 初始化商户配置
     */
    private Config getWechatConfig(){
        //使用微信新的公钥模式(新入网的,强制使用这种模式)
        RSAPublicKeyConfig.Builder builder = new RSAPublicKeyConfig.Builder()
                .merchantId("")     //微信商户号
                .publicKeyId("")    //微信公钥ID
                .publicKeyFromPath("")  //微信公钥证书路径
                .merchantSerialNumber("")   //微信证书序列号
                .privateKeyFromPath("")     //微信私钥证书路径
                .apiV3Key("");          //微信API V3密钥
        return builder.build();
    }
}
在Spring Boot项目中实现微信支付接入可以按照以下步骤进行: 1. 首先,需要在项目中引入相应的依赖,如微信支付的sdk和Spring Boot的相关依赖。 2. 在项目中创建微信支付的配置类,可以在该类中配置微信支付的相关信息,如appid、商户号、商户密钥等。可以参考之前提到的中的配置信息。 3. 创建微信支付的服务类,该类中可以编写具体的支付相关的方法,如生成预支付订单、回调处理等。可以使用微信支付sdk提供的API完成支付功能的具体实现。 4. 在需要使用微信支付的地方,可以注入微信支付服务类,并调用相应的方法来完成支付操作。可以结合具体的业务需求,如生成支付链接、调用支付接口等。 需要注意的是,在实现微信支付接入的过程中,还需要处理支付回调通知,以及支付结果的验签等安全问题,确保支付流程的安全性和可靠性。 这样,在Spring Boot项目中就可以实现微信支付接入。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Spring Boot项目实现微信支付宝支付](https://blog.csdn.net/orton777/article/details/131538447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [spring+mybatis接入微信支付支付宝支付(包含微信公众号支付和H5支付)](https://download.csdn.net/download/yongyuai/10603536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值