java实现微信支付

源代码如下

https://download.csdn.net/download/weixin_39592397/10874079

   

1.什么是手机支付

手机支付也称为移动支付(Mobile Payment),是指允许用户使用其移动终端(通常是指手机)对所消费的商品或服务进行账务支付的一种服务方式。

目前最常见的是支付宝和微信支付这两种。

    2.微信支付的具体支付方式

java实现微信支付_第1张图片

  1. 刷卡支付

刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。

    2.扫码支付

扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

     3.公众号支付

公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:

  • 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
  • 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
  • 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

    4.APP支付

 APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。

  1. 简介
  2. appid, 微信公众账号或开放平台APP的唯一标识
  3. mch_id, 微信支付系统中的商户收款账号
  4. partner, 财付通平台的商户账号
  5. partnerkey, 财付通平台的商户密钥
  6. sign, 数字签名, 根据微信官方提供的密钥和一套算法生成的一个加密信息, 就是为了保证交易的安全性



    支付流程如下介绍

    java实现微信支付_第2张图片
     

  7. “二维码页面”发出ajax请求到action中, 该action负责访问微信支付后台生成订单并获得订单信息, 然后把订单信息返回给”二维码页面”, 该页面根据订单信息生成二维码
  8. 用户打开手机微信扫描页面上的二维码进行支付...
  9. ”二维码页面”发出ajax请求到action中,该action负责访问微信支付后台查询订单支付状态, 并把获得支付状态返回给”二维码页面”, 该页面根据支付状态信息跳转到”支付结果”页面上

申请微信支付需要你们自己申请 现在直接上代码

1,创建实体类管理我们的appid 秘钥和商户号

@Component
@ConfigurationProperties(prefix="qyweixin")
@PropertySource(value = {"classpath:qiyeweixin.properties"})
public class Appid {
    public  String sCorpID;
    public  String sToken;
    public  String sEncodingAESKey;
    public  String Secret;

2,编写创建订单的controller 在点击生成订单按钮时跳转页面直接发送请求创建订单

   

@RequestMapping("/native")
    @ResponseBody
    public Map natives(HttpServletRequest request) throws Exception{
        // 生成订单
        TreeMap packageParams = new TreeMap();
        // 企业号或公众号id  商户号
        packageParams.put("appid", we.getAppid());
        // 企业收款账号
        packageParams.put("mch_id", we.getPartner());
        // 随机字符串
        String nonce_str = TenpayUtil.getRandomStr();
        packageParams.put("nonce_str", nonce_str);
        //商品名称
        packageParams.put("body", "测试");
        // 附加数据
        packageParams.put("attach", "");
        // 订单号
        String out_trade_no = TenpayUtil.getRandomStr();
        packageParams.put("out_trade_no", out_trade_no);

        // 支付总金额(微信官方的支付单位是分)
        String totalFee=TenpayUtil.getMoney("0.01");
        packageParams.put("total_fee", totalFee);
        
        // 生成订单的机器IP
        String ip =     request.getRemoteAddr();
        packageParams.put("spbill_create_ip", ip);
        
        // 回调URL
        packageParams.put("notify_url", we.getNotifyurl());

        // 设置支付方式
        packageParams.put("trade_type", "NATIVE");

        // 生成数字签名
        String sign = MD5Util.createSign(packageParams, we.getAppid(),
                we.getPartnerkey());
        //out_trade_no  totalFee  ip
        jdbc.update("insert into t_weixin(id,out_trade_no,totalFee,ip,flag,create_date,create_user)values(?,?,?,?,?,now(),?)",new Object[]{UUID.randomUUID().toString().replaceAll("-",""),out_trade_no,totalFee,ip,"1","张崇俊"});
        // 拼接xml数据
        String xml = "" + "" + we.getAppid() + ""
                + "" + we.getPartner() + "" + ""
                + nonce_str + "" + "" + sign + ""
                + "" + ""
                + out_trade_no + "" + "" + ""
                + "" + "" + totalFee + ""
                + "" + ip    + "" 
                + "" + we.getNotifyurl()    + "" 
                + "" + "NATIVE"    + "" + "";
        //通过HttpClient对象向微信支付后台发送xml数据
        String code_url="";
        Map maps = new TreeMap();
        try {
            String createOrederURL="https://api.mch.weixin.qq.com/pay/unifiedorder";
            HttpClient httpClient=new HttpClient(createOrederURL);
            httpClient.setHttps(true);
            httpClient.setXmlParam(xml);
            httpClient.post();
            String xmlStr=httpClient.getContent(); //从微信支付后台获取订单信息
            System.out.println(xmlStr);
            
            //解析xml数据得到用于支付的url地址
            Map map =TenpayUtil.doXMLParse(xmlStr);
            maps.put("code_url", map.get("code_url"));
            
            maps.put("out_trade_no", out_trade_no);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //返回订单信息到native.jsp
        return maps;
    }

3,前台接收订单数据放到二维码中

var out_trade_no;
    $(function(){
        $.post("http://127.0.0.1:8081/weChars/native",{},function(data){
            var url=data.code_url;  //支付URL
            out_trade_no=data.out_trade_no;  //订单号
        var qr = qrcode(10,'H')
        qr.addData(url);
        qr.make();
        console.log(url);

        $("#qrcode").html(qr.createImgTag());
        $("#qrtext").html("请打开手机微信进行扫描");
        queryPay();
        })
    });

代码运行结果

 java实现微信支付_第3张图片

java实现微信支付_第4张图片

到此!整个支付接口已经全部开发基本算完毕

源代码如下

https://download.csdn.net/download/weixin_39592397/10874079

 

 

你可能感兴趣的:(java实现微信支付)