微信小程序订单支付后端demo

环境准备

  • 企业版的小程序,这里获取小程序的appId和appSecret。
  • 小程序开通微信支付,这里涉及到商户号,将商户号和微信绑定。

微信官方文档

下单URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder
部分参数如下:
在这里插入图片描述
加入依赖

<!--        微信支付生成随机字符序列的依赖-->
        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>
        <!--微信支付相关的微信官方的依赖-->
        <dependency>
            <groupId>com.github.wechatpay-apiv3</groupId>
            <artifactId>wechatpay-apache-httpclient</artifactId>
            <version>0.4.8</version>
        </dependency>

项目中我们需要自己创建自己后台的订单表。这里只是展示调用微信官方的demo,具体的业务逻辑以及各种参数的校验需要自己根据项目需要自行完善。

//生成一个时间戳
String timeStamp = System.currentTimeMillis()+"";
//利用微信的工具类生成一个随机字符串
String nonce_str = WXPayUtil.generateNonceStr();
//https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

//利用map封装参数
TreeMap<String, String> map = new TreeMap<>();
map.put("appid", WechatConfig.APPID);
map.put("mch_id", (WechatConfig.MCH_ID));
map.put("nonce_str",nonce_str );
map.put("timeStamp",timeStamp);
//生成签名,根据这三个参数生成签名
String sign = WeChatUtils.createSign(map,WechatConfig.MCH_KEY);
//            map.put("sign", sign);
map.put("sign_type", "MD5");
map.put("body", orderDO.getDescribe());
map.put("out_trade_no", orderDO.getCode());
map.put("total_fee", WechatUtil.getPrice(orderDO.getRealPrice())+"");
map.put("spbill_create_ip", WeChatUtils.getRealIp(request));
//这个是支付回调的地址,我们可以在回调地址里面对用户下单的行为进行一系列的操作
map.put("notify_url", WechatConfig.NOTIFY_URL);
//这个参数文档里面有说明
map.put("trade_type", "JSAPI");
//这个是下单用户的openId
map.put("openid",orderDO.getOpenId());

HashMap<String,String> mmp = new HashMap<>(map);
map.put("sign",sign);
//            String signedXml = WXPayUtil.generateSignedXml(map,WechatConfig.MCH_KEY);

//封装成xml格式
String signedXml = WXPayUtil.generateSignedXml(mmp,WechatConfig.MCH_KEY);
//调用工具类发起请求
WxHttpClient httpClient = new WxHttpClient(url);
httpClient.setHttps(true);
httpClient.setXmlParam(signedXml);
httpClient.post();
//获得结果
String content = httpClient.getContent();
//将xml结果转化成map
Map<String, String> xmlToMap = WXPayUtil.xmlToMap(content);


//这里判断请求是否成功
if ("SUCCESS".equals(xmlToMap.get("return_code"))&&"SUCCESS".equals(xmlToMap.get("result_code"))){
   
                //从这块代码可以看出我们只用到了返回值里面的prepay_id,其他的都是自己生成的,返回值里面的其他参数都没有用,这个微信的官方文档没有说明白,研究了半天
                HashMap<String,String>  hashMap = new HashMap<>();
                hashMap.put("appId",WechatConfig.APPID);
                hashMap.put("timeStamp",timeStamp);

                hashMap.put("nonceStr",WXPayUtil.generateNonceStr());
                hashMap.put("signType","MD5");
                hashMap.put("package","prepay_id="+xmlToMap.get("prepay_id"));
                hashMap.put("paySign",WXPayUtil.generateSignature(hashMap,WechatConfig.MCH_KEY, WXPayConstants.SignType.MD5));
                //前端根据我返回的这些参数足够调起微信的支付页面发起支付了.
                return success(hashMap);
            }

工具类WxHttpClient

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北海冥鱼未眠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值