微信APP支付,后台回调

1、下载dom4j包,在我的资源中有下载。

2、代码实现,以下只列出接口类,其他相关类在微信包中有。若找不到的可以加我QQ:383010096


import java.io.BufferedReader;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/wxnotify")
public class WeiXinController {
@Autowired
private TOrderService tOrderService ;
@Autowired
private TMemberOpenService tMemberOpenService ;
@Autowired
private TRechargeLogService tRechargeLogService ;
@Autowired
private TMemberAccountService tMemberAccountService ;
@Autowired
private TMemberService tMemberService ;

@RequestMapping(value = { "/getPayNotify" }, method = { RequestMethod.POST })
@ResponseBody
public String getPayNotify(HttpServletRequest request,HttpServletResponse response) throws Exception {
BufferedReader reader = null ;

reader = request.getReader() ;
String line = "" ;
String xmlString = null ;
StringBuffer inputString = new StringBuffer() ;

while( (line = reader.readLine()) != null ){
inputString.append(line) ;
}

xmlString = inputString.toString() ;
request.getReader().close(); 


Map<String, String> map = new HashMap<>() ;
String result_code = "" ;
String return_code = "" ;
String out_trade_no = "" ;

map = XMLUtil.doXMLParse(xmlString) ;
result_code = map.get("result_code") ;
out_trade_no = map.get("out_trade_no") ;
return_code = map.get("return_code") ;

if( checkSign(xmlString)){
//订单操作
if( result_code.toLowerCase().equals("success") ){
//业务处理
}

return returnXML(result_code) ;
}
else{
return returnXML("FAIL") ;
}
}

private boolean checkSign(String xmlString){
Map<String,String> map = null ;

try{
map = XMLUtil.doXMLParse(xmlString) ;
}
catch(Exception e){
e.printStackTrace();
return false ;
}

String signFromAPIResponse = map.get("sign").toString() ;

if( StringUtils.isEmpty(signFromAPIResponse) ){
return false ;
}

map.put("sign", "") ;

String signForAPIResponse = getSign(map) ;

if( !signForAPIResponse.equals(signFromAPIResponse) ){
return false ;
}

return true ;
}

private String getSign(Map<String,String> map){
SortedMap<String, String> signParams = new TreeMap<String, String>();
       
for (Map.Entry<String, String> stringStringEntry : map.entrySet()) {
            signParams.put(stringStringEntry.getKey(), stringStringEntry.getValue());
        }
        
signParams.remove("sign");
        String sign = createSign("UTF-8", signParams);
        
        return sign;
}

private static String createSign(String characterEncoding,SortedMap<String,String> parameters){
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();
        Iterator it = es.iterator();
        
        while(it.hasNext()) {
            Map.Entry entry = (Map.Entry)it.next();
            String k = (String)entry.getKey();
            Object v = entry.getValue();
            if(null != v && !"".equals(v)
                    && !"sign".equals(k) && !"key".equals(k)) {
                sb.append(k + "=" + v + "&");
            }
        }
        
        sb.append("key=" + WeiXinConfig.PARTNER_KEY);//最后加密时添加商户密钥,由于key值放在最后,所以不用添加到SortMap里面去,单独处理,编码方式采用UTF-8
        String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
        
        return sign;
    }

private String returnXML(String return_code) {
        return "<xml><return_code><![CDATA["
                + return_code
                + "]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
    }

private boolean doPayResult( String out_trade_no ){
/**
* 1、查询是否是订单,若是订单,进行订单处理;
* 2、不是订单,查询是否是开通会员,若是,进行开通会员处理;
* 3、不是开通会员,充值处理
*/
TOrder order = tOrderService.getOne(out_trade_no) ; 


if( order != null ){
return this.doOrderPay(order) ;
}
else{
TMemberOpen open = tMemberOpenService.getByOpenId(out_trade_no) ;

if( open != null ){
return this.doOpenMemberPay(open) ;
}
else{
TRechargeLog recharge = tRechargeLogService.getOne(out_trade_no) ;

if( recharge != null ){
return this.doRechargePay(recharge) ;
}
}
}

return true ;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值