简单微信支付

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);
    }
}

转载于:https://my.oschina.net/u/4048873/blog/2990487

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值