微信支付遇到了无数的坑,总算是一个个解决了,官方文档真是让人郁闷到死,不多说,直接上代码。
一.生成预支付订单
private StringBuffer strbuffer; private Map<String,String> resultunifiedorder;
private final IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null);
1.1准备工作
strbuffer=new StringBuffer(); msgApi.registerApp(Constants.APP_ID); GetPrepayIdTask getPrepayId = new GetPrepayIdTask(); getPrepayId.execute();
1.2GetPrepayIdTask
//1.获取预支付订单编号 private class GetPrepayIdTask extends AsyncTask<Void, Void, Map<String,String>> { private ProgressDialog dialog; @Override protected void onPreExecute() { dialog = ProgressDialog.show(EShopWEIXIN_EPAYActivity.this, "提示", "正在获取预支付订单..."); } @Override protected void onPostExecute(Map<String,String> result) { if (dialog != null) { dialog.dismiss(); } resultunifiedorder=result; if(result.get("return_code").contentEquals("SUCCESS") ){ //预支付成功 genPayReq();//2生成签名参数 } strbuffer.append("prepay_id\n"+result.get("prepay_id")+"\n\n"); } @Override protected void onCancelled() { super.onCancelled(); } @Override protected Map<String,String> doInBackground(Void... params) { String url = String.format("https://api.mch.weixin.qq.com/pay/unifiedorder"); String entity = genProductArgs();//生成预支付订单请求 Log.e("orion",entity); byte[] buf = WXUtil.httpPost(url, entity);//提交预支付订单 String content = new String(buf); Log.e("orion", content); Map<String,String> xml=decodeXml(content); return xml; } }
1.3生成预支付订单请求
private String genProductArgs() {
S