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

本文介绍了微信小程序中如何实现订单支付和退款的功能,包括关键的源码实现。
微信小程序订单支付及退款功能
源码:
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
	 */
	@Test
	public 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);
        	Map<String, 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 block
					e.printStackTrace();
				}
                jsonObject.put("signInfo", signInfo);
            }
        }

    	jsonObject.put("result", result);
    	jsonObject.put("info", info);
    	System.out.println("---------"+jsonObject+"----------");
        return jsonObject;
	}
	
	
	/**
     * 调用统一下单接口
     * @param openId
     */
    private Map<String, 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值