final String tv_paytype; api = WXAPIFactory.createWXAPI(BuyActivity.this, APP_ID, false); api.registerApp(APP_ID); if (paytype.equals("1")) { //纯微信 paytype = "4"; tv_paytype = "微信支付"; } else { //都有 paytype = "5"; tv_paytype = "微信支付+K币"; } BigDecimal b = new BigDecimal(payprice); double payprice1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); OkGoUtils.getInstance().getOrderParameterW(MyApplication.CallResult.appkey, couponNumber, youhuijia, bi, MyApplication.CallResult.email, rowsBean.id + "", rowsBean.name, paytype, MyApplication.CallResult.phone, new Double(Double.valueOf(payprice1 + "") * 100).intValue() + "", "", rowsBean.personalprice + "", "", MyApplication.CallResult.id + "", MyApplication.CallResult.username, new OkGoUtils.HttpEngineListener() { @Override public void onSuccess(String s1, HashMap<String, Object> s) { Log.e("aaaaa", s1); WxPayBean wxPayBean = parseJsonToBean(s1, WxPayBean.class); if (wxPayBean.result == 0) { SortedMap<String, Object> params = new TreeMap<String, Object>(); wxdata = wxPayBean.data; api = WXAPIFactory.createWXAPI(BuyActivity.this, null); api.registerApp(APP_ID); // 检测是否有微信软件 if (isWeixinAvilible(BuyActivity.this)) { PayReq request = new PayReq(); request.appId = APP_ID; request.nonceStr = wxdata.nonce_str; request.packageValue = "Sign=WXPay"; request.partnerId = "*******"; request.prepayId = wxdata.prepay_id; Log.e("aaaaa", "wxdata.prepay_id:" + wxdata.prepay_id); request.timeStamp = (System.currentTimeMillis() / 1000) + ""; Log.e("aaaaa", "sj" + request.timeStamp); Log.e("aaaaa", "nonce_str" + wxdata.nonce_str); params.put("appid", request.appId); params.put("partnerid", request.partnerId); //商户号 params.put("prepayid", request.prepayId); params.put("package", request.packageValue); params.put("noncestr", request.nonceStr); params.put("timestamp", request.timeStamp); String sign = createSign(params); request.sign = sign; request.extData = "app data"; Log.e("aaaaa", "wxdata.sign:" + request.sign); SharedPreferences order = getSharedPreferences("order", 0); order.edit().putString("name_product", wxdata.name_product).commit(); order.edit().putString("timestamp1", wxdata.timestamp1).commit(); order.edit().putString("trade_no", wxdata.trade_no).commit(); order.edit().putString("style_pay", tv_paytype).commit(); order.edit().putString("useyouhui", discountid).commit(); String string = Utils.Object2String(rowsBean); order.edit().putString("aa", string); order.edit().commit(); api.sendReq(request); finish(); } else { ToastUtil.show(BuyActivity.this, "亲,您还没有安装微信"); } } } @Override public void onErroe(okhttp3.Call call, Exception e) { } });
获取预支付订单后,还要对参数进行MD5签名(服务端和本地做应该是都可以的),否则返回-1会造成支付失败。其他的参数按照文档来就可以了。