abc_cainiaotengfei 2016-07-12 01:02 采纳率: 42.9%
浏览 5539
已采纳

微信支付在获得prepayid之后怎么再次签名

微信支付在获得prepayid之后怎么再次签名?
签名后应该调哪个接口发起支付?
java服务端

  • 写回答

3条回答 默认 最新

  • sony1218 2016-07-12 01:27
    关注

    public static String getPackage(WxPayDto tpWxPayDto) {

        String openId = tpWxPayDto.getOpenId();
        // 1 参数
        // 订单号
        String orderId = tpWxPayDto.getOrderId();
        // 附加数据 原样返回
        String attach = "";
        // 总金额以分为单位,不带小数点
        String totalFee = getMoney(tpWxPayDto.getTotalFee());
    
        // 订单生成的机器 IP
        String spbill_create_ip = tpWxPayDto.getSpbillCreateIp();
        // 这里notify_url是 支付完成后微信发给该链接信息,可以判断会员是否支付成功,改变订单状态等。
        String notify_url = notifyurl;
        String trade_type = "JSAPI";
    
        // ---必须参数
        // 商户号
        String mch_id = partner;
        // 随机字符串
        String nonce_str = getNonceStr();
    
        // 商品描述根据情况修改
        String body = tpWxPayDto.getBody();
    
        // 商户订单号
        String out_trade_no = orderId;
    
        SortedMap<String, String> packageParams = new TreeMap<String, String>();
        packageParams.put("appid", appid);
        packageParams.put("mch_id", mch_id);
        packageParams.put("nonce_str", nonce_str);
        packageParams.put("body", body);
        packageParams.put("attach", attach);
        packageParams.put("out_trade_no", out_trade_no);
    
        // 这里写的金额为1 分到时修改
        packageParams.put("total_fee", totalFee);
        packageParams.put("spbill_create_ip", spbill_create_ip);
        packageParams.put("notify_url", notify_url);
    
        packageParams.put("trade_type", trade_type);
        packageParams.put("openid", openId);
    
        RequestHandler reqHandler = new RequestHandler(null, null);
        reqHandler.init(appid, appsecret, partnerkey);
    
        String sign = reqHandler.createSign(packageParams);
        String xml = "<xml>" + "<appid>" + appid + "</appid>" + "<mch_id>"
                + mch_id + "</mch_id>" + "<nonce_str>" + nonce_str
                + "</nonce_str>" + "<sign>" + sign + "</sign>"
                + "<body><![CDATA[" + body + "]]></body>" 
                + "<out_trade_no>" + out_trade_no
                + "</out_trade_no>" + "<attach>" + attach + "</attach>"
                + "<total_fee>" + totalFee + "</total_fee>"
                + "<spbill_create_ip>" + spbill_create_ip
                + "</spbill_create_ip>" + "<notify_url>" + notify_url
                + "</notify_url>" + "<trade_type>" + trade_type
                + "</trade_type>" + "<openid>" + openId + "</openid>"
                + "</xml>";
        String prepay_id = "";
        String createOrderURL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    
    
        prepay_id = new GetWxOrderno().getPayNo(createOrderURL, xml);
    
        System.out.println("获取到的预支付ID:" + prepay_id);
    
    
        //获取prepay_id后,拼接最后请求支付所需要的package
    
        SortedMap<String, String> finalpackage = new TreeMap<String, String>();
        String timestamp = Sha1Util.getTimeStamp();
        String packages = "prepay_id="+prepay_id;
        finalpackage.put("appId", appid);  
        finalpackage.put("timeStamp", timestamp);  
        finalpackage.put("nonceStr", nonce_str);  
        finalpackage.put("package", packages);  
        finalpackage.put("signType", "MD5");
        //要签名
        String finalsign = reqHandler.createSign(finalpackage);
    
        String finaPackage = "\"appId\":\"" + appid + "\",\"timeStamp\":\"" + timestamp
        + "\",\"nonceStr\":\"" + nonce_str + "\",\"package\":\""
        + packages + "\",\"signType\" : \"MD5" + "\",\"paySign\":\""
        + finalsign + "\"";
    
        System.out.println("V3 jsApi package:"+finaPackage);
        return finaPackage;
    }
    public static void main(String[] args) {
    
        //微信支付jsApi
        WxPayDto tpWxPay = new WxPayDto();
        tpWxPay.setOpenId(openId);
        tpWxPay.setBody("商品信息");
        tpWxPay.setOrderId(getNonceStr());
        tpWxPay.setSpbillCreateIp("127.0.0.1");
        tpWxPay.setTotalFee("0.01");
        getPackage(tpWxPay);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了