700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信支付-扫码支付 公众号支付的开发

微信支付-扫码支付 公众号支付的开发

时间:2021-11-03 15:57:37

相关推荐

微信支付-扫码支付 公众号支付的开发

这里主要涉及的是扫码支付以及公众号支付

需要遵循以下步骤:

1.请求生成支付订单

首先,您需要通过微信开放平台的API,向微信支付系统发送请求来生成一个支付订单。这可以通过向微信支付网关提交相关参数完成。

2.获得预付款ID

一旦您已经成功生成支付订单后,微信支付系统将会返回一个预付款ID,用于后续的支付操作。请注意,此时您还不能直接进行支付。

3.获取支付配置信息

接下来,您需要从微信支付系统中获取支付配置信息。这些信息包括微信商户ID、密钥等必要的信息。

4.调用微信支付系统完成支付

当您已经获取了以上信息之后,你就可以使用Java代码来调用微信支付系统来完成支付操作。这通常涉及到将相关参数传递给微信支付系统,并解析返回结果。

总体来说,在Java中实现微信支付可以通过使用微信支付SDK,或编写自己的代码来完成。但无论如何,都需要遵循微信支付系统的标准协议和规则,以确保顺利完成支付。

微信公众平台

微信商户平台

微信公众号开发文档

配置微信支付目录https://*.com/

配置微信公众号域名(业务域名、JS接口安全域名、网页授权域名)

商户证书采用apiclient_cert.p12 证书密码为商户号

(一) Native原生支付

Native原生支付即前文说的扫码支付,商户根据微信支付协议格式生成的二维码,用户通过微信“扫一扫”扫描二维码后即进入付款确认界面,输入密码即完成支付。

(二) JSAPI网页支付

JSAPI网页支付即公众号支付,可在微信公众号、朋友圈、聊天会话中点击页面链接,或者用微信“扫一扫”扫描页面地址二维码在微信中打开商户HTML5页面,在页面内下单完成支付。

开发前需要进行的配置:

(1)微信公众平台-开发配置

(2)微信商户平台-开发配置 设置回调url

支付代码:

(1)统一下单

public <T> T createOrder(@RequestBody WxPayUnifiedOrderRequest request, HttpServletRequest req, HttpServletResponse res) throws WxPayException {logger.info("测试统一下单接口。。。。。。。");String orderNo = DateUtil.getCurrentDateStr();//生成订单号logger.info("请求信息:{},生成的订单号:{}",request,orderNo);// 存储支付信息到数据库//拼接必要参数try {orderInfoService.saveOrderInfo(orderDto);//暂不保存} catch (Exception e) {e.printStackTrace();}logger.info("即将下单的请求信息:{}",request);return this.wxService.createOrder(request);}

(2)根据code_url生成二维码

@PostMapping("/createCode")public byte[] createScanPayQrcodeMode2(String code_url, File logoFile, Integer sideLength{return this.wxService.createScanPayQrcodeMode2(codeUrl, null, 400);;}

公众号支付

(1)获取用户授权,拿到openId;

链接地址:

https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

注意:

scope:设置为snsapi_base;

redirect_uri需要urlEncode处理;

redirect_uri:使用https链接来确保授权code的安全性。 一般为controller,拿到code后在其中做后续步骤,如/wechat/unifiedOrder

code:作为换取access_token的票据,每次用户授权带上的code将不一样,只能使用一次,5分钟未被使用自动过期。

(2)通过code换取网页授权access_token

在 /wechat/unifiedOrder Controller中做后续逻辑

String code = request.getParameter(“code”);

获取code后,请求以下链接获取access_token:

https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

代码如下:

public static AuthToken getTokenByAuthCode(String code) {AuthToken authToken = null;StringBuilder json = new StringBuilder();try {URL url = new URL(Constant.Authtoken_URL(code));URLConnection urlConnection = url.openConnection();urlConnection.connect();BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));String inputLine;while ((inputLine = in.readLine()) != null) {json.append(inputLine);}in.close();// 将json文本转化为authToken对象authToken = jsonToEntity(json.toString(), AuthToken.class);} catch (IOException e) {logger.error("*****获取access_token异常*****");e.printStackTrace();}return authToken;//json转换为实体类,AuthToken是返回数据的实体类public static <T> T jsonToEntity(String jsonString, Class<T> entityType) {T entity = null;try {entity = jsonObjectMapper.readValue(jsonString, entityType);} catch (Exception e) {logger.error("*****json转化异常*****");e.printStackTrace();}return entity;}

调用统一下单接口,获取参数值,传递给前台H5支付页面并调起支付

appId、timeStamp、nonceStr、prepayid、signType、paySign

前台JS代码如下:

function onBridgeReady() {WeixinJSBridge.invoke('getBrandWCPayRequest',{"appId" : appId,"timeStamp" : timeStamp,"nonceStr" : nonceStr,"package" : prepayId,"signType" : "MD5","paySign" : paySign},function(res) {if (res.err_msg == "get_brand_wcpay_request:ok") {location.href = "xxxx";} else {//这里支付失败和支付取消统一处理location.href = "xxxxxx";}});}$(document).ready(function() {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();}});

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。