微信小程序支付JAVA后台逻辑步骤

其实微信支付并没有想象中那么复杂, 你只需要花点时间看下我这篇文章,相信你可以很快学会,废话少说,跟我来吧!

①小程序前端会通过调用wx.login接口获取得到登陆凭据code。这个code获取之后5分钟内如果再次调用wx.login获取code并传递给②就会报错,code非法,这个需要注意下。

② 小程序将code登陆凭据和orderId订单编号穿给后台服务端,服务端调用https://api.weixin.qq.com/sns/jscode2session接口,获取session_key和openId。

③ 服务端拿到openId以后,调用统一下单接口https://api.mch.weixin.qq.com/pay/unifiedorder,并将返回的xml转化为map,得到其中的一些支付需要的参数进行二次签名,并返回给小程序。

 

@Override
public JSONObject getSecondSign(Map<String, String> map) throws Exception {
	String return_code = map.get("return_code");//返回状态码
        String return_msg = map.get("return_msg");//返回信息
        logger.debug("return_code:"+return_code+"------return_msg:" + return_msg);
        JSONObject JsonObject=new JSONObject() ;
        // 业务结果
        if("SUCCESS".equals(return_code)){
            String prepay_id = map.get("prepay_id");//返回的预付单信息
            String nonceStr = RandomUtil.get32RandomStr();
            JsonObject.put("nonceStr", nonceStr);
            JsonObject.put("package", "prepay_id="+prepay_id);
            Long timeStamp= System.currentTimeMillis()/1000;
            JsonObject.put("timeStamp", timeStamp+"");
            //再次签名
            String appid = PayConstant.WX_APPID;
            String stringSignTemp = "appId=" + appid
            						+ "&nonceStr=" + nonceStr
            						+ "&package=prepay_id=" + prepay_id
            						+ "&signType=MD5&timeStamp=" + timeStamp;
            stringSignTemp = stringSignTemp + "&key=" + PayConstant.WX_MCHKEY;
            String paySign = DigestUtils.md5Hex(stringSignTemp).toUpperCase();
            JsonObject.put("paySign", paySign);
        }
		return JsonObject;
	}
	String return_code = map.get("return_code");//返回状态码
        String return_msg = map.get("return_msg");//返回信息
        logger.debug("return_code:"+return_code+"------return_msg:" + return_msg);
        JSONObject JsonObject=new JSONObject() ;
        // 业务结果
        if("SUCCESS".equals(return_code)){
            String prepay_id = map.get("prepay_id");//返回的预付单信息
            String nonceStr = RandomUtil.get32RandomStr();
            JsonObject.put("nonceStr", nonceStr);
            JsonObject.put("package", "prepay_id="+prepay_id);
            Long timeStamp= System.currentTimeMillis()/1000;
            JsonObject.put("timeStamp", timeStamp+"");
            //再次签名
            String appid = PayConstant.WX_APPID;
            String stringSignTemp = "appId=" + appid
            						+ "&nonceStr=" + nonceStr
            						+ "&package=prepay_id=" + prepay_id
            						+ "&signType=MD5&timeStamp=" + timeStamp;
            stringSignTemp = stringSignTemp + "&key=" + PayConstant.WX_MCHKEY;
            String paySign = DigestUtils.md5Hex(stringSignTemp).toUpperCase();
            JsonObject.put("paySign", paySign);
        }
		return JsonObject;
	}

  ④ 小程序拿到上述的支付参数后,调用wx.requestpayment就可以调起支付了,用户完成付款后,小程序会回调我们设置的notify_url方便我们进行更新订单状态等后续操作。

 

附上日志打印:

以上为简单整理的四步逻辑,具体接口的参数可以参考微信支付API文档。https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.html
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jeff.sheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值