微信支付在获得prepayid之后怎么再次签名?
签名后应该调哪个接口发起支付?
java服务端
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);
}
网上有案例不过有很多参数我没有.案例:
3.5 添加 prepayid 再次签名
获取到 prepayid 后,将参数 appid、appkey、noncestr、package(注意:此处应置为 Sign=WXPay)、partnerid、prepayid、timestamp 签名后返回给 APP,签名方法跟 3.4 节
app_signature 说明一致。得到参数列表如下,通过这些参数即可在客户端调起支付。
{
“appid”:“wxd930ea5d5a258f4f”, “noncestr”:“139042a4157a773f209847829d80894d”, “package”:“Sign=WXpay”;
“partnerid”:“1900000109” “prepayid”:“1101000000140429eb40476f8896f4c9”, “sign”:“7ffecb600d7157c5aa49810d2d8f28bc2811827b”, “timestamp”:“1398746574”
}
总结下开发:
先按照同一下单请求参数去获取prepay_id
得到prepay_id, 参考上面的 3.5 添加 prepayid 再次签名
请问 GetWxOrderno().getPayNo写的什么?