栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微信支付简略

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信支付简略

 

1.引入依赖
  
            com.github.wxpay
            wxpay-sdk
            0.0.3
    
2.配置类

此处用到是前锋教育的商户

public class MyPayConfig  implements WXPayConfig {
    @Override
    public String getAppID() {
        //应用ID
        return "wx632c8f211f8122c6";
    }

    @Override
    public String getMchID() {
        //直连商户号
        return "1497984412";
    }

    @Override
    public String getKey() {
        //- 商户Key:sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC
        return "sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC";
    }

    @Override
    public InputStream getCertStream() {
        return null;
    }

    @Override
    public int getHttpConnectTimeoutMs() {
        return 0;
    }

    @Override
    public int getHttpReadTimeoutMs() {
        return 0;
    }
}
 3.使用Native下单
@RestController
@RequestMapping("orders")
@CrossOrigin
@Api(value = "提供订单详情接口", tags = "订单管理")
public class OrdersController {
    @Autowired
    private OrdersService ordersService;

    @ApiOperation("添加订单")
    @PostMapping("/add")
    public ResultVo addOrders(String cids, @RequestBody Orders orders) {
        ResultVo ok = ResultVo.ok();
        try {
            Map orderInfo = ordersService.addOrders(orders, cids);
            WXPay wxPay = new WXPay(new MyPayConfig());
            HashMap map = new HashMap<>();
            map.put("body", orderInfo.get("productNames"));             //  商品描述
            map.put("trade_type", "CNY");              // 支付币种
            map.put("out_trade_no", orderInfo.get("orderId")); //使用当前用户订单的编号作为当前支付交易的交易号
            map.put("total_fee","1");               //支付金额   orders.getActualAmount()*100+""
            map.put("trade_type", "NATIVE");         //交易类型
            map.put("notify_url","https://3ad6-120-216-179-100.jp.ngrok.io/pay/callback");   //设置支付完成时返回的地址
            Map res = wxPay.unifiedOrder(map);
            ok.data("payUrl",res.get("code_url")).data("productNames",orderInfo.get("productNames")).data("orderId",orderInfo.get("orderId"));
        } catch (SQLException e) {
            return ResultVo.error().message("提交订单失败");
        } catch (Exception e) {
            return ResultVo.error().message("库存不足或提交订单失败");
        }
        return ok;
    }


    @ApiOperation("查询商品支付状态")
    @GetMapping("/orderStatus/{oid}")
    public ResultVo getOrderStatus(@PathVariable("oid") String orderId){
        return ordersService.getOrderById(orderId);
    }
}
4.微信支付回调接口

        1.使用内网穿透ngrok进行回调

@RestController
@RequestMapping("pay")
@CrossOrigin
public class PayController {
    @Autowired
    private OrdersService ordersService;
    @ApiOperation("微信支付成功回调接口")
    @PostMapping("/callback")
    public String success(HttpServletRequest request) throws Exception {
        ServletInputStream is = request.getInputStream();
        byte[] bytes = new byte[1024];
        int len = -1;
        StringBuilder stringBuilder = new StringBuilder();
        while ((len = is.read(bytes)) != -1){
            stringBuilder.append(new String(bytes,0,len));
        }

        String s = stringBuilder.toString();
        //使用帮助类 将xml接口的字符转换成map
//        不是json格式不能用json转
        Map map = WXPayUtil.xmlToMap(s);
        if(map != null && "success".equalsIgnoreCase(map.get("result_code"))){
            // 支付成功
            // 修改订单状态为“代发货/已支付/
            String orderId = map.get("out_trade_no");
            int i = ordersService.updateOrderStatus(orderId,"2");
            WebSocketService.sendMessage(orderId,"1");
            if (i > 0){
                //响应微信支付平台  否则微信一直响应
                HashMap resp = new HashMap<>();
                resp.put("return_code","success");
                resp.put("return_msg","OK");
                resp.put("appid",map.get("appid"));
                return WXPayUtil.mapToXml(resp);
            }
        }
        return null;
    }
}
5.前端详情 1.订单详情
doSubmit: function() {
						//将订单信息提交到:添加订单接口
						//1.准备订单数据
						var address = this.addrs[this.addrIndex].province + " " + this.addrs[this.addrIndex].city +
							" " +
							+this.addrs[this.addrIndex].area + " " + this.addrs[this.addrIndex].addr;
						var orders = {
							"actualAmount": this.totalPrice,
							"orderRemark": this.orderRemark,
							"payType": this.payType,
							"receiverAddress": address,
							"receiverMobile": this.addrs[this.addrIndex].receiverMobile,
							"receiverName": this.addrs[this.addrIndex].receiverName,
							"totalAmount": this.totalPrice,
							"userId": getCookieValue("userId")
						};
						//2.提交订单
						var url3 = baseUrl + "orders/add";
						axios({
							url: url3,
							method: "post",
							headers: {
								token: getCookieValue("token")
							},
							params: {
								cids: this.cartIds
							},
							data: orders
						}).then((res) => {
							if (res.data.code == 200) {
								//跳转到支付页面显示支付二维码
								var orderInfo = res.data.data; // {orderId:"123123",productNames:"aseraer",payUrl:"weixin://...."}
								orderInfo.totalPrice = this.totalPrice; // {orderId:"123123",productNames:"aseraer",payUrl:"weixin://....",totalPrice:18.8}

								localStorage.setItem("orderInfo", JSON.stringify(orderInfo));
								window.location.href = "order-pay.html";
							} else if (res.data.code == 2001 || res.data.code == 2002) {
								window.location.href = "login.html";
							} else {
								alert(res.data.msg);
							}
						}).catch((err)=>{
							console.log(err)
						});
					}
2.支付详情

        1.使用qrcode.makeCode(this.orderInfo.payUrl);生成二维码


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/981301.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号