微信支付4步骤搞定

项目需要搞微信支付,百度了那么多但是太复杂了,还有腾讯的那些个文档真是RLGL

下面直接上步骤:

第一步:加入第三方jar包:

<dependency>    <groupId>cn.springboot</groupId>    <artifactId>best-pay-sdk</artifactId>    <version>1.1.0</version></dependency>

第二步:在项目根路径下创建配置文件weixinpay.properties,当然你写死在代码里也可以。(这步就可以省略)
# 公众账号IDweixin.mpAppId=#商户号weixin.mchId=#商户密钥weixin.mchKey=商户证书路径weixin.keyPath=#微信支付异步通知地址weixin.notifyUrl=

第三步:创建微信支付配置文件类
package com.github.lly835.config;import com.lly835.bestpay.config.WxPayH5Config;import com.lly835.bestpay.service.impl.BestPayServiceImpl;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;

import java.util.ResourceBundle;

/** * 微信支付配置文件 */@Componentpublic class PayConfig {    @Bean    public WxPayH5Config wxPayH5Config() {        WxPayH5Config wxPayH5Config = new WxPayH5Config();        ResourceBundle resource = ResourceBundle.getBundle("weixinpay");//不要加.properties后缀,我加了报错
        wxPayH5Config.setAppId(resource.getString("weixin.mpAppId")); //这里的参数你如果写死,第二步可以省略        wxPayH5Config.setMchId(resource.getString("weixin.mchId"));        wxPayH5Config.setMchKey(resource.getString("weixin.mchKey"));        wxPayH5Config.setKeyPath(resource.getString("weixin.keyPath"));        wxPayH5Config.setNotifyUrl(resource.getString("weixin.notifyUrl"));        return wxPayH5Config;    }    @Bean    public BestPayServiceImpl bestPayService(WxPayH5Config wxPayH5Config) {        BestPayServiceImpl bestPayService = new BestPayServiceImpl();        bestPayService.setWxPayH5Config(wxPayH5Config);        return bestPayService;    }}

第四步:微信支付调用

/** * 微信支付 */@Controller@Slf4jpublic class PayController {

final static Logger log = LoggerFactory.getLogger(PayController.class);

@Autowired    private BestPayServiceImpl bestPayService;

/**     * 发起微信支付     * @param openid 用户唯一标识     * @param orderAmount  订单金额     * @param orderName 订单描述     * @param orderId 订单编号     * @param map     * @return     */    @GetMapping(value = "/pay")    public ModelAndView pay(@RequestParam("openid") String openid,Double orderAmount,String orderName,String orderId,                            Map<String, Object> map) {        PayRequest request = new PayRequest();

//支付请求参数        request.setPayTypeEnum(BestPayTypeEnum.WXPAY_H5);        request.setOrderId(orderId);        request.setOrderAmount(orderAmount);        request.setOrderName(orderName);        request.setOpenid(openid);        log.info("【发起支付】request={}", JsonUtil.toJson(request));

PayResponse payResponse = bestPayService.pay(request);        log.info("【发起支付】response={}", JsonUtil.toJson(payResponse));

map.put("payResponse", payResponse);

return new ModelAndView("weixin/create", map);    }

/**     * 异步回调     * @param notifyData <return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg>     * @return     * @throws Exception     */    @PostMapping(value = "/notify")    public ModelAndView notify(@RequestBody String notifyData) throws Exception {        log.info("【异步回调】request={}", notifyData);        PayResponse response = bestPayService.asyncNotify(notifyData);        log.info("【异步回调】response={}", JsonUtil.toJson(response));        return new ModelAndView("weixin/success");    }}
前端代码:create.ftl代码
<script>    function onBridgeReady(){        WeixinJSBridge.invoke(                ‘getBrandWCPayRequest‘, {                    "appId":"${payResponse.appId}",     //公众号名称,由商户传入                    "timeStamp":"${payResponse.timeStamp}",         //时间戳,自1970年以来的秒数                    "nonceStr":"${payResponse.nonceStr}", //随机串                    "package":"${payResponse.packAge}",                    "signType":"MD5",         //微信签名方式:                    "paySign":"${payResponse.paySign}" //微信签名                },                function(res){                    if(res.err_msg == "get_brand_wcpay_request:ok" ) {                        alert(‘支付成功‘);                    }else if(res.err_msg == "get_brand_wcpay_request:cancel") {                        alert(‘支付过程中用户取消‘);                    }else if(res.err_msg == "get_brand_wcpay_request:fail") {                        alert(‘支付失败‘);                    }else {                        alert(‘未知异常‘);                    }                }        );    }    if (typeof WeixinJSBridge == "undefined"){        if( document.addEventListener ){            document.addEventListener(‘WeixinJSBridgeReady‘, onBridgeReady, false);        }else if (document.attachEvent){            document.attachEvent(‘WeixinJSBridgeReady‘, onBridgeReady);            document.attachEvent(‘onWeixinJSBridgeReady‘, onBridgeReady);        }    }else{        onBridgeReady();    }</script>

success.ftl代码
<xml>    <return_code><![CDATA[SUCCESS]]></return_code>    <return_msg><![CDATA[OK]]></return_msg></xml>

整个项目结构图:




原文地址:https://www.cnblogs.com/zeussbook/p/10239885.html

时间: 2024-10-11 16:29:06

微信支付4步骤搞定的相关文章

seo优化的6步骤搞定基础优化

SEO包括六个环节: 1.关键词分析(也叫关键词核心定位) SEO关键词的核心定位最重要的一环,关键词分析包括:用户需求分析,关键词关注量分析.竞争对手分析.关键 词与网站相关性分析.关键词指数.关键词布置.关键词排名预测. 2.网站架构分析 简洁网站结构符合搜索引擎的爬虫喜好则有利于SEO.网站架构分析包括:减少搜索引擎不识别的代码(FLASH.JS.视频),网站架构深层设计不利于优化.网站框架实现树状目录结构.网站导航与链接优化. 3.网站目录和页面优化 SEO不止是让网站首页在搜索引擎有好

iOS通俗易懂的微信支付接入和爬坑指南,十分钟轻松搞完

现在基本所有的App都会接入支付宝支付以及微信支付,也有很多第三方提供给你 SDK帮你接入,但是这种涉及到支付的东西还是自己服务器搞来的好一些,其实搞懂了 逻辑非常的简单,下面直接给大家说说下基本流程和接入需要注意的东西. 前期准备(这个东西一般来讲我们不需要来操心,但是还是稍微介绍下) 1.到微信开放平台注册账号点击打开链接 2.进入管理中心------移动应用------创建移动应用----根据页面完善应用资料 3.审核过后,通过应用详情页面,查看应用详情,查看AppID和AppSecret

iOS开发微信支付

现在基本所有的App都会接入支付宝支付以及微信支付,也有很多第三方提供给你 SDK帮你接入,但是这种涉及到支付的东西还是自己服务器搞来的好一些,其实搞懂了 逻辑非常的简单,下面直接给大家说说下基本流程和接入需要注意的东西. 支付宝详细爬坑接入指南传送门   前期准备(这个东西一般来讲我们不需要来操心,但是还是稍微介绍下) 1.到微信开放平台注册账号点击打开链接 2.进入管理中心------移动应用------创建移动应用----根据页面完善应用资料 3.审核过后,通过应用详情页面,查看应用详情,

Linux服务器其中一个磁盘满了怎么办?一个软连接就搞定。

适用环境要求:Linux系统及服务器.有管理员权限.存在多余空间的磁盘例如下图中"/home"在磁盘sda5中与"/"不属于同一块磁盘: 1.首先转移正在使用的将要满的磁盘中文件夹,我们环境中的是"/home/aaa",移动到"/"根目录中(先确保根目录中不存在这个文件夹): 命令:"mv /home/aaa /aaa"2.做ln -s 命令创建软连接(这里不做ln -s的解释,有兴趣可以去各大搜索引擎查找

Android微信支付SDK开发

一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 2.创建应用 创建移动应用获取 AppID  AppSecret 要获取支付功能还需要开发者资质认证,300RMB/年的费用,貌似是开放平台中唯一要收费的- 3.AndroidMainfest文件修改 权限 <uses-permission

Android微信支付SDK开发笔记

一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 2.创建应用 创建移动应用获取 AppID  AppSecret 要获取支付功能还需要开发者资质认证,300RMB/年的费用,貌似是开放平台中唯一要收费的… 3.AndroidMainfest文件修改 权限声明: <uses-permiss

ecshop增加pc扫描二维码微信支付功能代码

ecshop开发网站,如果没有手机版,又想通过微信支付,可以加入pc二维码扫描微信支付功能 工具/原料 ecshop商城系统,phpqrcode,WxPayPubHelper 公众号已申请微信支付 方法/步骤 使用PHP QR Code生成二维码,下载,在商品支付页面加入 include 'phpqrcode/phpqrcode.php'; $pay_url ='http://www.xxx.com/weixin/weixin.php?order_id='.$order['order_sn'];

微信支付服务端开发

前言 最近应公司业务需求,把微信支付完成了,当然已经顺利上线.但是开发的过程是也是踩了很多坑,下面我就先说说开发流程,以及在开发中遇到的大大小小的坑. 开发流程 首先,看一下微信开方平台关于支付的一个时序图,如下: 微信支付时序图https://pay.weixin.qq.com/wiki/doc/api/app/app.php 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择商品,提交订单,选择微信支付. 步骤2:商户后台收到用户支付单,调用微信支付统一下单接口.参见[统一

iOS 微信支付总结

1.支付流程 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择商品,提交订单,选择微信支付. 步骤2:商户后台收到用户支付单,调用微信支付统一下单接口. 步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP.参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,pa