手把手教你接入网站微信支付

这篇具有很好参考价值的文章主要介绍了手把手教你接入网站微信支付。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为何需要接入微信支付?

小摊小贩们在线下交易一般无需接入微信支付,只需要向别人出示自己的付款码就行。为什么?因为一手交钱,一手交货,你不付钱,人家不会给你商品。

但在网上,要实现无人值守,别人扫码付了款,平台得自动知道,然后再发货。所以必须接入微信支付。

微信支付必须是企业主体,要有营业执照才能申请。
本文简单整理了一下该过程,备忘。

提一下,微信开放平台和微信公众平台是两个独立的平台,账号不能互通,如果你的网站想接入微信支付和微信登录,对不起,各交300块,这是腾讯的坑人之处。

申请微信公众号

首先你要有一个微信账号,然后申请服务号或公众号。
申请地址:https://mp.weixin.qq.com
手把手教你接入网站微信支付

  • 通过邮箱激活你的微信公众平台帐号。
  • 在左菜单栏里"微信认证"里进行认证,通过后支付300块给微信支付平台。
  • 等待腾讯工作人员审核,如果资料无误,大致一到两个工作日就会审核通过。

申请商户号

  • 申请商户号
    说明文档
    https://pay.weixin.qq.com/index.php/core/info

  • 关联一个appId,搜索appId, 然后提交申请

  • 在公众号侧,菜单”微信支付“里确认申请

  • 管理成功后,会看到相应的appId:

手把手教你接入网站微信支付

  • 申请证书和设置APIv3秘钥,在"API安全"里:
    手把手教你接入网站微信支付
    这个证书和秘钥是为后续开发做准备的。

Java SDK代码示例

支付流程

手把手教你接入网站微信支付

Native API的使用示例

import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
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.PrepayResponse;


public class WechatPayClient {
    /** 商户号 */
    public static String merchantId = "1238205867";
    /** AppId */
    public static String appId = "wx68239edec2543d9b1";
    /** 商户API私钥路径 */
    public static String privateKeyPath = "/Users/liu/cert/apiclient_key.pem";
    /** 商户证书序列号 */
    public static String merchantSerialNumber = "62290C9EC18AA37BECF21972F0D166C57B2B49E9";
    /** 商户APIV3密钥 */
    public static String apiV3key = "K1876JinysaSong2012JindsaiSong201";

    public static void main(String[] args) {
        // 使用自动更新平台证书的RSA配置
        // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
        Config config =
                new RSAAutoCertificateConfig.Builder()
                        .merchantId(merchantId)
                        .privateKeyFromPath(privateKeyPath)
                        .merchantSerialNumber(merchantSerialNumber)
                        .apiV3Key(apiV3key)
                        .build();
        // 构建service
        NativePayService service = new NativePayService.Builder().config(config).build();
        // request.setXxx(val)设置所需参数,具体参数可见Request定义
        PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        amount.setTotal(100);
        request.setAmount(amount);
        request.setAppid("wxa9d9651ae******");
        request.setMchid("190000****");
        request.setDescription("测试商品标题");
        request.setNotifyUrl("https://notify_url");
        request.setOutTradeNo("out_trade_no_001");
        // 调用下单方法,得到应答
        PrepayResponse response = service.prepay(request);
        // 使用微信扫描 code_url 对应的二维码,即可体验Native支付
        System.out.println(response.getCodeUrl());
    }
}

上述notify_url用于接收微信平台的通知。一旦支付完成,商户平台通过notify_url接收通知,然后发货。notify_url必须为直接可访问的URL,不允许携带查询串,要求必须为https地址。

支付结果通知

支付结果通知是以POST 方法访问商户设置的通知url,通知的数据以JSON 格式通过请求主体(BODY)传输。通知的数据包括了加密的支付结果详情。

下面详细描述对通知数据进行解密的流程:

用商户平台上设置的APIv3密钥(微信商户平台(pay.weixin.qq.com)-账户设置-API安全-设置APIv3密钥),记为key。
针对resource.algorithm中描述的算法(目前为AEAD_AES_256_GCM),取得对应的参数nonce和associated_data。
使用key、nonce和associated_data,对数据密文resource.ciphertext进行解密,得到JSON形式的资源对象

示例代码:

@RequestMapping(value = "/notify", method = {RequestMethod.POST})
    public @ResponseBody
    void doNotify(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestBody) {
        log.debug("微信支付成功!");
        String serialNumber = request.getHeader("Wechatpay-Serial");
        String nonce = request.getHeader("Wechatpay-Nonce");
        String signature = request.getHeader("Wechatpay-Signature");
        String timestamp = request.getHeader("Wechatpay-Timestamp");
        log.debug("微信支付流水号为: {}", serialNumber);
        getTransaction(serialNumber, nonce, signature, timestamp, requestBody);

    }

/**
     * 获得支付交易
     * @param wechatPayCertificateSerialNumber
     * @param nonce
     * @param signature
     * @param timestamp
     * @param requestBody
     * @return
     */
    public Transaction getTransaction(String wechatPayCertificateSerialNumber,
                                      String nonce, String signature, String timestamp,
                                      String requestBody) {
        // 构造 RequestParam
        RequestParam requestParam = new RequestParam.Builder()
                .serialNumber(wechatPayCertificateSerialNumber)
                .nonce(nonce)
                .signature(signature)
                .timestamp(timestamp)
                .body(requestBody)
                .build();

        // 如果已经初始化了 RSAAutoCertificateConfig,可直接使用
        // 没有的话,则构造一个
        NotificationConfig config = new RSAAutoCertificateConfig.Builder()
                .merchantId(merchantId)
                .privateKeyFromPath(privateKeyPath)
                .merchantSerialNumber(merchantSerialNumber)
                .apiV3Key(apiV3key)
                .build();

        // 初始化 NotificationParser
        NotificationParser parser = new NotificationParser(config);

        // 以支付通知回调为例,验签、解密并转换成 Transaction
        Transaction transaction = parser.parse(requestParam, Transaction.class);

        return transaction;
    }

通知前端用户

两种方式:Ajax 长轮询 , websocket。

第三方支付平台

除了微信支付,还有支付宝,有无统一的支付接入方式、同时支持它们呢?

  • https://gitee.com/jumbot/JumbotPay

  • https://github.com/isaltyfish/unipay

  • 聚合二维码:二维彩虹二维码,https://zhuanlan.zhihu.com/p/371158814

相关法规

2022年央行颁布了两个新政策,第一个就是不能够使用远程扫码支付。第二个就是个人收款码不再具有商用用途。文章来源地址https://www.toymoban.com/news/detail-471566.html

相关链接

  • 微信官方文档
  • 微信公众号平台
  • 腾讯客服
  • 商户平台
  • 申请商户证书用到的工具:
    windows版本
    mac版本
  • 微信支付Java SDK
  • 微信支付v3 API文档
  • 微信支付Native方式API说明
  • Java版微信/支付宝支付

支付宝支付接入

  • 支付宝接入文档

到了这里,关于手把手教你接入网站微信支付的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包