手把手教你接入网站微信支付
文章目录
- 为何需要接入微信支付?
- 申请微信公众号
- 申请商户号
- Java SDK代码示例
- 支付流程
- Native API的使用示例
- 支付结果通知
- 第三方支付平台
- 相关法规
- 相关链接
- 支付宝支付接入
为何需要接入微信支付?
小摊小贩们在线下交易一般无需接入微信支付,只需要向别人出示自己的付款码就行。为什么?因为一手交钱,一手交货,你不付钱,人家不会给你商品。
但在网上,要实现无人值守,别人扫码付了款,平台得自动知道,然后再发货。所以必须接入微信支付。
微信支付必须是企业主体,要有营业执照才能申请。
本文简单整理了一下该过程,备忘。
申请微信公众号
首先你要有一个微信账号,然后申请服务号或公众号。
申请地址: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();// 构建serviceNativePayService 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 @ResponseBodyvoid 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) {// 构造 RequestParamRequestParam 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();// 初始化 NotificationParserNotificationParser parser = new NotificationParser(config);// 以支付通知回调为例,验签、解密并转换成 TransactionTransaction transaction = parser.parse(requestParam, Transaction.class);return transaction;}
第三方支付平台
除了微信支付,还有支付宝,有无统一的支付接入方式、同时支持它们呢?
https://gitee.com/jumbot/JumbotPay
https://github.com/isaltyfish/unipay
聚合二维码:二维彩虹二维码,https://zhuanlan.zhihu.com/p/371158814
相关法规
2022年央行颁布了两个新政策,第一个就是不能够使用远程扫码支付。第二个就是个人收款码不再具有商用用途。
相关链接
- 微信官方文档
- 微信公众号平台
- 腾讯客服
- 商户平台
- 申请商户证书用到的工具:
windows版本
mac版本 - 微信支付Java SDK
- 微信支付v3 API文档
- 微信支付Native方式API说明
- Java版微信/支付宝支付
支付宝支付接入
- 支付宝接入文档
手把手教你接入网站微信支付相关推荐
- 手把手教你springboot企业微信开发(三)之 weui、zepto、thymeleaf
手把手教你springboot企业微信开发(三)之 weui.zepto.thymeleaf weui zepto thymeleaf 这一篇主要事基础部分,概述一下weui.zepto.thymel ...
- 手把手教你写网站:Python WEB开发技术实战
摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...
- 手把手教你写个微信小程序
手把手教你写个微信小程序 很多人看完bmob快速入门,并完成了bmob的基本配置之后依然不知道如何下手去写自己的代码,那么跟着我一起来一步一步做个小程序吧. 工具:Bmob后端云 新建小程序项目 一. ...
- WooCommerce接入支付宝微信支付
WooCommerce接入支付宝微信支付 前言 安装支付宝插件(方法一) 安装配置 获取注册信息 安装支付宝插件(方法二) 安装微信支付插件 下载及安装 获取微信公众号APPID,微信支付密钥 获取微 ...
- 图文版alexa网站登陆教程,手把手教你把网站提交到Alexa
图文版alexa网站登录教程,手把手教你把网站提交到Alexa 关键字:Alexa登录,Alexa登陆,Alexa排名,Alexa怎么登陆,Alexa登录技巧 版权声明:本文由 动漫周边 www.do ...
- 微信系列研究之-手把手教你脱掉微信的外衣
转载来源:http://bbs.pediy.com/showthread.php?t=200230 标 题: [原创][原创]微信系列研究之-手把手教你脱掉微信的外衣 作 者: ggggwwww 时 ...
- PC网站微信支付怎么开通0.2费率?网页微信支付0.6费率降低至0.2
大部分商家用的网页扫码支付的费率基本在0.6%-1%,有些可能打折的话是0.54%-0.9%,这意味着用户支付一万所产生的手续费就是54-90元,如果一些流水比较大商家来说,确实是一笔不小的支出. 一 ...
- 【weixin】微信支付---PC网站微信支付
一.PC网站支付 微信支付支持完成域名ICP备案的网站接入支付功能.PC网站接入支付后,可以通过JSAPI支付或Native支付,自行开发生成二维码,用户使用微信"扫一扫"来完成支 ...
- 公众平台商户接入(微信支付)功能申请教程
场景及类型介绍 商家可以申请公众账号支付和APP(应用客户端)支付两种接入微信支付方式. 公众账号支付:用户在微信公众帐号内使用微信支付消费,案例:易迅.QQ充值. APP(应用客户端)支付:用户在手 ...
最新文章
- python路1---variable
- pytest使用简介
- Dapr 在阿里云原生的实践
- 玩linux笔记——持续更新
- mysql rename所标时间_mysql rename命令
- USB摄像头视频监控项目学习笔记
- 微信企业号第三方应用开发[一]——创建套件
- 析构函数c+_了解C ++中的析构函数
- 微信小程序icon图标引入
- 苹果手机通过扫描二维码下载APP
- Mac必备开源鼠标手势软件 MacStroke
- web开发设为首页、添加到收藏夹实现方法
- 为革命保护视力 --- 给 Visual Studio 换颜色
- ChatGPT 会开源吗?
- ACM纪念日 C语言
- E11000 duplicate key error collection
- 深圳职业技术学院计算机专业分数线,2016深圳职业技术学院分数线
- Linux系统怎么复制文件夹下的全部文件到另外文件夹?
- PADS 快捷命令(无模指令)
- mvn将本地jar文件导入本地maven库中