请看清楚你的微信支付是v2还是v3。在这里整理的是v3的,v2的同学请忽略!

前期准备须要用的是商户证书,用的是p12的。设置api密钥(在微信商户端中设置),还须要在微信公众号中设置jsapi授权文件夹;

1.微信授权获取用户openid

<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的微信公众号appid&redirect_uri=授权完回调你的url&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect">点击測试</a>

2.授权回调接口。在接口中解析获取用户openid,假设已经授权的过的。我是通过解析获取到code然后再请求微信得到openid

https://api.weixin.qq.com/sns/oauth2/access_token?

appid=你的微信公众号appid&secret="+appsecret+"&code="+code+"&grant_type=authorization_code

3.用户下单提交,分两步,第一步通过统一下单接口获取prepay_id,第二步提交微信支付

前端代码:依据获取的openid提交后端

function wxpayCommit(){
$.ajax({
type : "POST",
url : "/wxpayCommit",
data :"openid=${openid}",
dataType : "json",
async : false,
success : function(obj) { if(obj.prepay_id ==""){
return;
} WeixinJSBridge.invoke('getBrandWCPayRequest',{
"appId" : obj.appid,
"timeStamp":obj.timeStamp,
"nonceStr" : obj.nonceStr,
"package" : "prepay_id="+obj.prepay_id,
"signType" : "MD5",
"paySign" : obj.paySign
},function(res){
alert(res.err_msg);
if(res.err_msg == "get_brand_wcpay_request:ok" ) {
window.location.href="/index";
}else{
alert("fail");
window.location.href="/wxpayCommit"; }
});
},
error : function(msg) {
alert("fail"); }
});


//统一下单接口获取prepay_id

注意中间遇到签名错误,是你的sign有问题,最好办法在微信官网在线生成签名的比对一样。立即找到错误

SortedMap<String, String> packageParams = new TreeMap<String, String>();
packageParams.put("appid", TenpayConfig.appid);
packageParams.put("mch_id", TenpayConfig.partner);
packageParams.put("nonce_str", WXUtil.getNonceStr());
packageParams.put("body", "測试");
packageParams.put("out_trade_no", 你的唯一订单号);
packageParams.put("total_fee","1"); //银行币种
packageParams.put("spbill_create_ip", request.remoteAddress); //订单生成的机器IP,指用户浏览器端IP
packageParams.put("notify_url", 回调的url);
packageParams.put("openid", openid);
packageParams.put("trade_type", "JSAPI"); RequestHandler reqHandler = new RequestHandler(null, null);
reqHandler.init(TenpayConfig.appid, TenpayConfig.appsecret, TenpayConfig.partnerkey);
String sign = reqHandler.createSign(packageParams);
packageParams.put("sign", sign);
String xml = toXml(packageParams);
String prepay_id = "";
String createOrderURL = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //获取用户的
prepay_id = new GetWxOrderno().getPayNo2(createOrderURL, xml);
//生成paysign
SortedMap<String, String> payParams = new TreeMap<String, String>();
String non = WXUtil.getNonceStr();
String time = WXUtil.getTimeStamp();
payParams.put("appId", TenpayConfig.appid);
payParams.put("nonceStr", non);
payParams.put("timeStamp", time);
payParams.put("package", "prepay_id="+prepay_id);
payParams.put("signType", "MD5");
String paysign = reqHandler.createSign(payParams);

附上其它代码

public static String getNonceStr() {
Random random = new Random();
return MD5Util.MD5Encode(String.valueOf(random.nextInt(10000)),"GBK");
}
public static String getTimeStamp() {
return String.valueOf(System.currentTimeMillis() / 1000);
}
public static String getMchBillno(Stringmchid) {
SimpleDateFormat shortSdf =new SimpleDateFormat("yyyyMMdd");
String result = mchid+shortSdf.format(new Date())+String.valueOf(System.currentTimeMillis() / 1000);
returnresult;
}
public String createSign(SortedMap<String, String>packageParams) {
StringBuffer sb =new StringBuffer();
Set es = packageParams.entrySet();
Iterator it = es.iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
String v = (String)entry.getValue();
if (null !=v && !"".equals(v) && !"sign".equals(k)
&& !"key".equals(k)) {
sb.append(k +"=" +v +"&");
}
}
sb.append("key=" +this.getKey());//api密钥
String sign = MD5Util.MD5Encode(sb.toString(),this.charset)
.toUpperCase();
returnsign;
}
 private static String toXml(SortedMap<String, String>params)
{
StringBuilder sb = new StringBuilder();
sb.append("<xml>"); for (Map.Entry<String, String>e :params.entrySet())
{
sb.append("<" +e.getKey() +">");
sb.append(e.getValue());
sb.append("</" +e.getKey() +">");
}
sb.append("</xml>");
returnsb.toString();
}
public static String getPayNo2(Stringurl,StringxmlParam)throws Exception{
KeyStore keyStore = KeyStore.getInstance("PKCS12");
String prepay_id = "";
FileInputStream instream = new FileInputStream(new File("p12的证书路径"));
try {
keyStore.load(instream, TenpayConfig.partner.toCharArray());
} finally {
instream.close();
}
// Trust own CA and all self-signed certs
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, TenpayConfig.partner.toCharArray())
.build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1" },
null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();
try {
HttpPost httpost= HttpClientConnectionManager.getPostMethod(url);
httpost.setEntity(new StringEntity(xmlParam,"UTF-8"));
HttpResponse response = httpclient.execute(httpost);
String jsonStr = EntityUtils.toString(response.getEntity(),"UTF-8");
if(jsonStr.indexOf("FAIL")!=-1){
return "2";
}
Map map = doXMLParse(jsonStr);
prepay_id = (String) map.get("prepay_id");
} finally {
httpclient.close();
}
returnprepay_id;
}

jsapi微信支付v3版的更多相关文章

  1. 新版本 JSAPI微信支付V3 C# DEMO

    小弟在公众号后台无意中点了更新(微信支付接口升级)PS:想都没有想,心里还乐滋滋的免费的干嘛不升级...后果来了.面临着支付不能用了,代码需要重新更新. /** * JS_API支付demo * == ...

  2. Android微信支付V3版

    由于公司需求做微信APP支付,在集成过程中也遇到各种问题,比如说签名错误,body编码必须为UTF-8.APP端无法调用支付页面直接到支付结果页面.结果为null,code=-1等等: 1.签名错误问 ...

  3. 微信支付 V3版

    本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...

  4. 微信支付v3接口的 官方 Java SDK

    啰嗦几句:微信支付v3版接口麻烦吗?在对接微信支付v3接口时,本来是一件很简单的事情,其实微信支付v3接口并不是很复杂,但是微信团队的管理很混乱,给我们开发者带来了巨大的麻烦. 微信支付v3版接口对接 ...

  5. 微信支付开发(1) JS API支付V3版(转)

    http://www.cnblogs.com/txw1958/p/wxpayv3-jsapi.html 本文介绍微信支付下的jsapi实现流程 前言 微信支付现在分为v2版和v3版,2014年9月10 ...

  6. 微信支付java版V3验证数据合法性

    [TOC] 1. 微信支付java版V3验证数据合法性 概要:使用微信支付接口时,微信会返回或回调给商户XML数据,开发者需要验证微信返回的数据是否合法. 特别提醒:商户系统对于支付结果通知的内容一定 ...

  7. 到处都是坑的微信支付V3

    业务需要一个在微信上能付款的功能,于是乎想到了最普遍的支付宝,坑爹的是T与A是水火不容啊,默默的还是接微信支付吧,没想到从此掉进了连环坑…… 网上写微信支付接口的还是很多,PHP官方有(鄙视源码作者, ...

  8. 微信支付v3开发(5) 扫码并输入金额支付

    关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 作者:方倍工作室 本文介绍微信支付下的扫描二维码并输入自定义金额的支付的开发过程. 注意 微信支付 ...

  9. 坑爹的微信支付v3,其实没有那么坑

    http://www.cnblogs.com/zskbll/p/wxpay.html 研究微信开发一年多了,每个新接口,都会第一时间进行研究.微信支付开放很久,一直没机会接触到支付接口,等了好久终于从 ...

随机推荐

  1. leetcode 生成杨辉三角形, 118 119 Pascal's Triangle 1,2

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Retu ...

  2. E. Reachability from the Capital(tarjan+dfs)

    求联通分量个数,在dfs一次 #include <iostream> #include <algorithm> #include <cstring> #includ ...

  3. Python的matplotlib库画图不能显示中文问题解决

    有两种解决办法: 一种是在代码里设置为能显示中文的字体,如微软雅黑(msyh.ttf)和黑体(simsun.ttc) 如下在要画图的代码前添加: import matplotlib.pyplot as ...

  4. Linux FTP客户端

    1.File Zilla File Zilla是一个开源的,跨平台的Linux FTP客户端.File Zilla有一个标签式的用户界面,允许用户查看正在传输的文件的所有细节.File Zilla是通 ...

  5. python(2) 图像通道,几何变换,裁剪

    一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...

  6. 第6章8节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览-小结

    本章我们重点环绕处理网络过来的命令的MonkeySourceNetwork这个事件源来阐述学习Monkey是怎样处理MonkeyRunner过来的命令的.以下总结下MonkeyRunner从启动Mon ...

  7. hdu 思维风暴

    点击打开链接 偶然在杭电上看到的题目,数学题.好像是一道六年级奥赛题目,反正我是没有想出来,也知道往那上面想.就是找不到规律啊.学习了网上的方法, 这道题须要求出来多添加的点,就是与之前每条边添加的点 ...

  8. UMeditor百度富文本编辑器的使用

    批量上传的图片在线管理没法查看图片 是因为jar包本身的Bug,这里暂时做了个替换展示.就是找到Img.js  然后搜索 img.set 替换下就好了 var url=list[i].url ;    ...

  9. python学习之--SyntaxError: Non-ASCII character '\xe5'

    在安装好eclipse之后试了一下 创建了了一个pydev project package.module 在test.py中编写最简单的命令 print "helloworld" ...

  10. HDU 4572 Bottles Arrangement

    具体的证明:点击打开链接 我的想法: 要想保证题目所说 构造最小行的和,仅仅能是这样的情况 .....      m-3  m-2  m-1  m    |   m  m-1  m-2  m-3   ...