import java.io.InputStream;
import com.github.wxpay.sdk.WXPayConfig;
import woxiang.util.ConfigCenterUtil;
/**
*
* 微信支付配置对象
*
* @author Alex, Moks
*/
public class PayConfig implements WXPayConfig{
public static final String APP_ID = ConfigCenterUtil.getKeyByKey("APP_ID");
public static final String MCH_ID = ConfigCenterUtil.getKeyByKey("MCH_ID");
public static final String KEY = ConfigCenterUtil.getKeyByKey("KEY");
public static final String NOTIFY_URL = ConfigCenterUtil.getKeyByKey("NOTIFY_URL");
public static final String CALL_BACK_IP = ConfigCenterUtil.getKeyByKey("USER_IP");
public static final String WX_API_ORDER_URL = "https://api.mch.weixin.qq.com/pay/orderquery";
private static final int CONNECT_TIMEOUT_MS = 8000;
private static final int READ_TIMEOUT_MS = 10000;
//获取 App ID(企业方公众号Id)
public String getAppID() {
return APP_ID;
}
//获取 Mch ID(商户账号)
public String getMchID() {
return MCH_ID;
}
//获取 API 密钥
public String getKey() {
return KEY;
}
//HTTP(S) 连接超时时间,单位毫秒
public int getHttpConnectTimeoutMs() {
return CONNECT_TIMEOUT_MS;
}
//HTTP(S) 读数据超时时间,单位毫秒
public int getHttpReadTimeoutMs() {
return READ_TIMEOUT_MS;
}
//回调URL
public String getNotifyurl() {
return NOTIFY_URL;
}
@Override
//获取商户证书内容(我们这里不需要证书)
public InputStream getCertStream() {
return null;
}
}
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.http.client.HttpClient;
import com.github.wxpay.sdk.WXPay;
import com.housekeeper.myListener.utils.MyHttpUtil;
import com.housekeeper.myListener.utils.MyLogUtil;
import woxiang.util.JSONUtil;
import woxiang.util.SystemUtil;
public class PayUtils {
/**
* 获取微信支付二维码
*
* 1. 设置公共请求参数
* 2. 设置订单参数
* 3. 获取支付二维码
*
* @author Alex, Moks
* */
public static String wxPay(String out_trade_no,String total_fee,String subject) {
// 1. 设置公共请求参数
PayConfig config = new PayConfig();
WXPay wxpay = new WXPay(config);
// 2. 设置订单参数
Map<String, String> data = new HashMap<String, String>();
//商品描述
data.put("body", subject);
//商户订单号
data.put("out_trade_no", out_trade_no);
//设置币种(CNY:人民币)
data.put("fee_type", "CNY");
//标价金额
data.put("total_fee", total_fee);
//用户IP
data.put("spbill_create_ip", PayConfig.CALL_BACK_IP);
//支付成功后的响应的地址
data.put("notify_url", PayConfig.NOTIFY_URL);
// 此处指定为扫码支付
data.put("trade_type", "NATIVE");
//商品id,这个参数是扫码支付的时候必传的参数
data.put("product_id", "0");
try {
Map<String, String> resp = wxpay.unifiedOrder(data);
MyLogUtil.outInfo("wxPay.response:"+resp);
// 3. 获取支付二维码
String rtString = resp.get("code_url");
return rtString;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("微信支付服务器异常");
}
}
public static String validateOrder(String nonce_str,String transaction_id,String sign){
String rt = "";
String xml = "<xml>"
+"<appid>"+PayConfig.APP_ID+"</appid>"
+"<mch_id>"+PayConfig.MCH_ID+"</mch_id>"
+"<nonce_str>4b9024c65e144b57941b76ff481f6eb1</nonce_str>"
+"<transaction_id>4200000135201806104738617709</transaction_id>"
+"<sign>D188A6AF4D92E7A15A1FE8516A533362</sign>"
+"</xml>";
System.out.println(xml);
return rt;
}
// 订单查询
public static String selectOrder(String orderNo) {
String rt = "";
String wxOrderURL = "https://api.mch.weixin.qq.com/pay/orderquery";
String rkdPath = SystemUtil.getDataDirPath()+File.separatorChar+"xml"+File.separatorChar+"WX-ORDER-SELECT.xml";
HashMap<String,String> rkdMap = new HashMap<String, String>();
rkdMap.put("appid", PayConfig.APP_ID);
rkdMap.put("mch_id", PayConfig.MCH_ID);
rkdMap.put("nonce_str", PayConfig.NOTIFY_URL);
rkdMap.put("transaction_id", orderNo);
rkdMap.put("sign", "");
String selXml = JSONUtil.getStringByParamMapNew(rkdPath,rkdMap);
System.out.println("selXML="+selXml);
// Post body
rt = MyHttpUtil.post(wxOrderURL, rkdMap);
return rt;
}
public static void main(String[] args){
// 生成二维码
String rt = PayUtils.wxPay("132892851937",1+"","五粮液普一");
System.out.println("二维码="+rt);
// 验证订单
String nonce_str = "4b9024c65e144b57941b76ff481f6eb1";
String transaction_id = "4200000135201806104738617709";
String sign = "D188A6AF4D92E7A15A1FE8516A533362";
validateOrder(nonce_str,transaction_id,sign);
// 查询订单
String rtSel = selectOrder("1325381536823381055");
System.out.println("rtSel"+rtSel);
}
}