微信支付的大致流程

Posted SmallCuteMonkey80%

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信支付的大致流程相关的知识,希望对你有一定的参考价值。

文章目录

流程图:

微信支付

为商家提供代理收款服务

1.微信支付业务-商户需要注册微信支付业务

  • 商户编号:3454563
    • 商户账号:23435
    • 商户编号appID: werselfjldsjhtoieiurt0
    • 商户密钥:sdfsdlkfjdslkjfFGFGDSRTG89

2. 微信支付业务-商户注册微信支付业务

支付订单,并不是用户提交的商品订单,而是商户向微信支付平台申请的支付链接

2.1导入微信支付Maven依赖

  • wxpay的maven依赖生成

    <!-- https://mvnrepository.com/artifact/com.github.wxpay/wxpay-sdk -->
    <dependency>
        <groupId>com.github.wxpay</groupId>
        <artifactId>wxpay-sdk</artifactId>
        <version>0.0.3</version>
    </dependency>
    
    

    2.2 创建微信支付配置类:

  • 创建一类,实现WxPayConfig接口

  • 重写三分方法,分别设置AppID\\商户ID\\商户密钥

package com.qfedu.fmmall.config;

import com.github.wxpay.sdk.WXPayConfig;

import java.io.InputStream;

public class MyPayConfig implements WXPayConfig 
  
    //商户账号
    @Override
    public String getAppID() 
        return "wx632c8f211f8122c6";
    
    //商户appID
    @Override
    public String getMchID() 
        return "1497984412";
    

    @Override
    public String getKey() 
        return "sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC";
    
	//商户的密钥
    @Override
    public InputStream getCertStream() 
        return null;
    

    @Override
    public int getHttpConnectTimeoutMs() 
        return 0;
    

    @Override
    public int getHttpReadTimeoutMs() 
        return 0;
    


2.2和微信的接口进行相关的参数设置和获取微信支付链接

2.21 支付回调接口,支付成功前端面试进行提示,支付成功
创建自己的url,PayController类:
package com.qfedu.fmmall.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/pay")
public class PayController 
    @PostMapping("/success")
    public void success()

    


2.22添加订单快照成功生成支付链接

必须设置的配置参数:

//            必填选项   用于设置支付完成时的回调方法接口
            data.put("notify_url","/pay/success");
package com.qfedu.fmmall.controller;

import com.github.wxpay.sdk.WXPay;
import com.qfedu.fmmall.config.MyPayConfig;
import com.qfedu.fmmall.entity.Orders;
import com.qfedu.fmmall.service.OrderService;
import com.qfedu.fmmall.vo.ResultStatus;
import com.qfedu.fmmall.vo.ResultVO;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin
@RequestMapping("/order")
@Api(value = "提供订单相关的接口",tags = "订单管理")
public class OrderController 
    @Autowired
    private OrderService orderService;

    @PostMapping("/add/cids")
    public ResultVO add(@PathVariable("cids") List<Integer> cids,
                        @RequestBody Orders orders)

        ResultVO resultVO=null;

//        测试用的OrderId
        try 
            Map<String, String> orderInfo = orderService.addOrder(cids, orders);
            String orderId=orderInfo.get("orderId");


//           订单快照创建成功,申请支付链接

            HashMap<String,String> data=new HashMap<>();
//            设置当前订单信息
            data.put("body",orderInfo.get("productNames")); //商品描述
            data.put("out_trade_no",orderId);//使用当前用户订单编号作为当前支付交易的交易编号
            data.put("fee_type","CNY"); //支付币种
            data.put("total_fee", orders.getActualAmount()+""); //支付金额
            data.put("trade_type","NATIVE");//交易类型

//            必填选项   用于设置支付完成时的回调方法接口
            data.put("notify_url","/pay/success");
            WXPay wxPay=new WXPay(new MyPayConfig());
            Map<String, String> resp = wxPay.unifiedOrder(data);

//            把微信支付平台生成的链接获取到
            orderInfo.put("payUrl",resp.get("code_url"));
            resultVO=new ResultVO(ResultStatus.OK,"提交订单成功!",orderInfo);
            System.out.println(resp);

//            code_url -> weixin://wxpay/bizpayurl?pr=Iv5Fsq6zz
         catch (SQLException e) 

            resultVO= new ResultVO(ResultStatus.NO,"下单失败",null);

         catch (Exception e) 
            e.printStackTrace();
        

        return resultVO;
    


前端获取到生成的payUrl,根据payUrl生成相关的支付二维码

// 提交订单
			    		 doSubmit:function()
						//1.准备订单数据
						var cids=this.cartIds;
						var orders=
						"actualAmount":this.totalPrice,
					
						"orderId": "",
						// 通过双向绑定可以获取订单备注
						"orderRemark": this.orderRemark,
						"payTime": "",
						"payType": "1",
						"receiverAddress": this.addrs[0].province+""+this.addrs[0].city+""+
						this.addrs[0].area+""+this.addrs[0].addr,
						"receiverMobile": this.addrs[0].receiverMobile,
						"receiverName":  this.addrs[0].receiverName,
					
						"totalAmount": this.totalPrice,
						
						"updateTime": "",
						"userId": getCookieValue("userId")
						;
					
						console.log(this.cartIds);
						var url3=baseUrl+"order/add/"+this.cartIds;
						axios(
							url:url3,
							method:"post",
							headers:
								token:getCookieValue("token"),
							,
							data:orders
						).then((res)=>
							var orderinfo=res.data.data;
							console.log("orderinfo------------------------")
							console.log(res.data.data,"data---------");
							
							console.log(orderinfo,"orderinfo------------");
						
							orderinfo.totalPrice = this.totalPrice;

							localStorage.setItem("orderinfo",JSON.stringify(orderinfo));
							window.location.href="order-pay.html";



							console.log(res.data.data);
						);

				

// vue的生命周期 创建对象---》beforeCreate--->created---->加载模板
			created() 
				this.username=getCookieValue("username");
				var jsonstr=localStorage.getItem("orderinfo");
				console.log(jsonstr);
				// if(jsonstr!=null)
				// 	localStorage.removeItem("orderinfo");
				// 

			   this.orderInfo=eval("("+jsonstr+")");
				console.log(this.orderInfo);
			,

			// 渲染二维码放在mounted中,不可以放在created中
			mounted()				
				var url=this.orderInfo.payUrl;
			          console.log("url="+url);
					  new QRCode(document.getElementById("qrcode"), url);
			,
			



以上是关于微信支付的大致流程的主要内容,如果未能解决你的问题,请参考以下文章

微信支付的大致流程

微信支付的大致流程

微信商户号格式有误

分享一下,微信的支付接入(流程+实现)

商家怎么在百度小程序接入微信支付

微信H5支付商家存在未配置的参数,请联系商家解决的