接著上一篇: SpringBoot對(duì)接微信小程序支付功能開(kāi)發(fā)(一,下單功能)
在上一篇下單功能中我們有傳支付結(jié)果回調(diào)地址。
下面是回調(diào)接口實(shí)現(xiàn)
package com.office.miniapp.controller;
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.office.miniapp.constants.ProjectConstant;
import com.office.miniapp.entity.TdOrders;
import com.office.miniapp.entity.TdShops;
import com.office.miniapp.entity.TdWxPay;
import com.office.miniapp.service.TdOrdersService;
import com.office.miniapp.service.TdShopsService;
import com.office.miniapp.service.TdWxPayService;
import com.office.miniapp.utils.HttpClientUtil;
import com.office.miniapp.utils.WxPayUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
* <p>
* 支付表 前端控制器
* </p>
*
* @author XQD
* @since 2022-08-13
*/
@Slf4j
@RestController
@RequestMapping("/wxPay")
public class TdWxPayController extends BaseController {
@PostMapping("/callback")
public Object callback(HttpServletRequest request) {
log.info("【支付回調(diào)】");
System.out.println("Wechatpay-Timestamp:" + request.getHeader("Wechatpay-Timestamp"));
System.out.println("Wechatpay-Nonce:" + request.getHeader("Wechatpay-Nonce"));
System.out.println("Wechatpay-Signature:" + request.getHeader("Wechatpay-Signature"));
System.out.println("Wechatpay-Serial:" + request.getHeader("Wechatpay-Serial"));
Map result = new HashMap();
result.put("code", "FAIL");
try {
StringBuilder signStr = new StringBuilder();
// 應(yīng)答時(shí)間戳\n
signStr.append(request.getHeaders("Wechatpay-Timestamp")).append("\n");
// 應(yīng)答隨機(jī)串\n
signStr.append(request.getHeaders("Wechatpay-Nonce")).append("\n");
// 應(yīng)答報(bào)文主體\n
BufferedReader br = request.getReader();
String str = null;
StringBuilder builder = new StringBuilder();
while ((str = br.readLine()) != null) {
builder.append(str);
}
System.out.println("支付應(yīng)答報(bào)文主體:" + builder);
signStr.append(builder.toString()).append("\n");
// 第一步:驗(yàn)證簽名
if (WxPayUtil.signVerify(request.getHeader("Wechatpay-Serial"), signStr.toString(), request.getHeader("Wechatpay-Signature"))) {
result.put("message", "sign error");
return result;
}
// 第二步:解密密文
String decryptOrder = WxPayUtil.decryptOrder(builder.toString());
System.out.println("解密后支付信息:" + decryptOrder);
JSONObject jsonObject = JSON.parseObject(decryptOrder);
//String transactionId = jsonObject.getString("transaction_id");
//String appid= jsonObject.getString("appid");
//String successTime = new DateTime(jsonObject.getString("success_time")).toString();
//JSONObject jsonPayer = JSON.parseObject(jsonObject.getString("payer"));
//String openid= jsonPayer.getString("openid");
//解密后的支付信息存入數(shù)據(jù)庫(kù)...
//第三步:驗(yàn)證訂單,解密后的訂單信息和自己數(shù)據(jù)庫(kù)中的訂單信息進(jìn)行比對(duì)
//金額對(duì)比 orders.getAmount()為數(shù)據(jù)庫(kù)中的訂單金額
if (orders.getAmount().equals(jsonAmout.getInteger("total"))) {
if ("SUCCESS".equals(jsonObject.getString("trade_state"))) {
// 支付成功...
//根據(jù)支付信息查詢已存的訂單信息,進(jìn)行狀態(tài)改變等操作,根據(jù)業(yè)務(wù)操作
}
}
result.put("code", "SUCCESS");
result.put("message", "成功");
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
根據(jù)官網(wǎng)給的參數(shù)進(jìn)行業(yè)務(wù)處理
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-668972.html
這就完成了,微信支付回調(diào)你的地址,并且把支付的信息傳進(jìn)來(lái),剩下就要根據(jù)自己業(yè)務(wù)進(jìn)行操作。
注意:
1,驗(yàn)證簽名和解密的操作在上一篇下單功能的文章中的WxPayUtil 中
2,這個(gè)地址必須為線上地址,https前綴的域名+/wxPay/callback。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-668972.html
到了這里,關(guān)于SpringBoot對(duì)接微信小程序支付功能開(kāi)發(fā)(二,支付回調(diào)功能)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!