微信小程序> 微信小程序订单支付、退款

微信小程序订单支付、退款

浏览量:764 时间: 来源:夜色星空

微信小程序订单支付及退款功能

源码:

public class Test_OrderControllerImpl {private static final Logger logger = Logger.getLogger(PayServiceImpl.class);@Value("${WX_AppID}")private String appId;@Value("${NotityUrl}")private String notityUrl;/** * 支付订单接口 * @param payDto * @param request * @return */@Testpublic JSONObject payOrder(PayDto payDto, HttpServletRequest request) {if (logger.isDebugEnabled()) {logger.debug("entering payOrder(PayDto)");logger.debug("payDto: "" + payDto + """);}JSONObject jsonObject = new JSONObject();        boolean result = true;        String info = "成功了,获取到prepayId";                String openId = payDto.getOpenId();        if(StringUtils.isBlank(openId)) {        String key = null;            String mchId = null;        openId = openId.replace(""", "").trim();        String clientIP = CommonUtil.getClientIp(request);        int money = (int)(1*100);        String orderCode = "";                logger.error("openId: " + openId + ", clientIP: " + clientIP + ", money: " + money + ", orderCode: " + orderCode );                String randomNonceStr = RandomUtils.generateMixString(32);        MapString, String rest = unifiedOrder(openId,clientIP,randomNonceStr,money,orderCode,key,mchId);        String prepayId = rest.get("prepay_id");        String randomStr = rest.get("nonce_str");                logger.error("prepayId: " + prepayId);                if(StringUtils.isBlank(prepayId)) {        result = false;                info = "出错了,未获取到prepayId";            } else {                String timeStamp = String.valueOf(System.currentTimeMillis() / 1000 );                SignInfo signInfo = new SignInfo();try {signInfo = createSignInfo(prepayId, randomStr, timeStamp);String sign = getTwoSign(signInfo,key);signInfo.setSign(sign);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}                jsonObject.put("signInfo", signInfo);            }        }    jsonObject.put("result", result);    jsonObject.put("info", info);    System.out.println("---------"+jsonObject+"----------");        return jsonObject;}/**     * 调用统一下单接口     * @param openId     */    private MapString, String unifiedOrder(String openId, String clientIP, String randomNonceStr, int money, String orderCode,String key,String mchId) {        try {    String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";        PayInfo payInfo = createPayInfo(openId,clientIP,randomNonceStr,money,orderCode,mchId);        String md5 = getSign(payInfo,key);    payInfo.setSign(md5);        logger.error("md5 value: " + md5);        String xml = CommonUtil.payInfoToXML(payInfo);    xml = xml.replace("__", "_").replace("![CDATA[", "").replace("]]", "");    StringBuffer buffer = CommonUtil.httpsRequest(url, "POST", xml);    MapString, String result = CommonUtil.parseXml(buffer.toString());    System.out.println("-----result----:"+result+"----");    String return_code = result.get("return_code");        if(StringUtils.isNotBlank(return_code) && return_code.equals("SUCCESS")) {            String return_msg = result.get("return_msg");            if(StringUtils.isNotBlank(return_msg) && !return_msg.equals("OK")) {                //log.error("统一下单错误!");                return null;            }            return result;        } else {            return null;        }    } catch (Exception e) {        e.printStackTrace();    }    return null;    }        private PayInfo createPayInfo(String openId, String clientIP, String randomNonceStr, int money,String orderCode,String mchId) {        Date date = new Date();        String timeStart = TimeUtils.formatDate(date, "yyyyMMddHHmmss");        String timeExpire = TimeUtils.formatDate(TimeUtils.addDay(date, 2), "yyyyMMddHHmmss");        PayInfo payInfo = new PayInfo();        payInfo.setAppid(appId);        payInfo.setMch_id(mchId);        payInfo.setDevice_info("WEB");        payInfo.setNonce_str(randomNonceStr);        payInfo.setSign_type("MD5");  //默认即为MD5        payInfo.setBody("**");        payInfo.setAttach("商品名称");        payInfo.setOut_trade_no(orderCode);        payInfo.setTotal_fee(money);        payInfo.setSpbill_create_ip(clientIP);        payInfo.setTime_start(timeStart);        payInfo.setTime_expire(timeExpire);        payInfo.setNotify_url(notityUrl);        payInfo.setTrade_type("JSAPI");        payInfo.setLimit_pay("no_credit");        payInfo.setOpenid(openId);        return payInfo;    }    private String getSign(PayInfo payInfo,String key) throws Exception {        StringBuffer sb = new StringBuffer();        sb.append("appid=" + payInfo.getAppid())                .append("&attach=" + payInfo.getAttach())                .append("&body=" + payInfo.getBody())                .append("&device_info=" + payInfo.getDevice_info())                .append("&limit_pay=" + payInfo.getLimit_pay())                .append("&mch_id=" + payInfo.getMch_id())                .append("&nonce_str=" + payInfo.getNonce_str())                .append("&notify_url=" + payInfo.getNotify_url())                .append("&openid=" + payInfo.getOpenid())                .append("&out_trade_no=" + payInfo.getOut_trade_no())                .append("&sign_type=" + payInfo.getSign_type())             

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎