对接微支付接口开发详细步骤
2017-08-11 10:52
302 查看
这篇文章是献给正在开发微信支付,但是对微信支付的流程,或是看微信支付文档有疑问的小伙伴们,我也是一枚小白,在第一次对接微信支付,也是措手不及。ok 不多说了,写的不好,大家不要喷我哈。
1、第一步
我们需要从哪里入手,当然我们需要有微信商家账号怎样申请商家账号呢,当然还是需要有一个已经审核过的微信公众号,这样的话,首先你必须先有个审核通过的微信公众号,这里就不说怎么审核公众号了这个公众号比较好弄。
如何申请微信商户号(如图)
从微信公众号 申请商户支付账户 点击微信支付(跳转到微信支付信息填写提交)根据提示填写即可
填写好信息需要等待审核,这里就不多做解释了(下图申请成功后的截图)
当显示为审核通过会在您这边指定的邮箱里会收到如下图展示的邮件信息
现在就可以登录商户支付平台进行设定信息了(如图进行登录)
第一次需要安装证书,根据提示安装即可。安装好后点击(如下图)秘钥进行设定
设定好秘钥后要记住,这个开发的时候会使用到。
2、第二步开发(到此上面的商户号就已经可以使用了)
创建一个WeiXinConfig.java 这里是微信的一些配置信息
创建一个 WeiXinCommonUtil.java 名字可以随意哈。
创建一个 WeiXinPayCommonUtil.java
ok 到此 代码已经贴出,WeiXinConfig 返回的codeUrl 就是我们需要的这个生成一下二维码,用扫描就可以支付了。
1、第一步
我们需要从哪里入手,当然我们需要有微信商家账号怎样申请商家账号呢,当然还是需要有一个已经审核过的微信公众号,这样的话,首先你必须先有个审核通过的微信公众号,这里就不说怎么审核公众号了这个公众号比较好弄。
如何申请微信商户号(如图)
从微信公众号 申请商户支付账户 点击微信支付(跳转到微信支付信息填写提交)根据提示填写即可
填写好信息需要等待审核,这里就不多做解释了(下图申请成功后的截图)
当显示为审核通过会在您这边指定的邮箱里会收到如下图展示的邮件信息
现在就可以登录商户支付平台进行设定信息了(如图进行登录)
第一次需要安装证书,根据提示安装即可。安装好后点击(如下图)秘钥进行设定
设定好秘钥后要记住,这个开发的时候会使用到。
2、第二步开发(到此上面的商户号就已经可以使用了)
创建一个WeiXinConfig.java 这里是微信的一些配置信息
public static String key="";//上图设定好的KEY //网关 public static String gatewayUrl ="https://api.mch.weixin.qq.com/pay/unifiedorder"; //公众号ID public static String appid=""; //公众账号ID public static String mch_id=""; //设备号 public static String device_info=""; //随机字符串 public static String nonce_str=""; //签名 public static String sign=""; //签名类型 public static String sign_type="MD5"; //商品描述 public static String body=""; //商品详情 public static String detail=""; //附加数据 public static String attach=""; //商城订单号 public static String out_trade_no=""; //币种 public static String fee_type="CNY"; //交易金额(为分)例如12.53 应该(12.53*100) 放入当前值 public static int total_fee=0; //客户IP public static String spbill_create_ip=""; //交易起始时间yyyyMMddHHmmss public static String time_start=""; //交易结束时间 public static String time_expire=""; //这个字段空着即可(订单优惠标记) public static String goods_tag=""; //微信回调接口(重要) public static String notify_url=""; //支付交易类型 public static String trade_type="NATIVE"; //支付订单号 public static String product_id=""; //指定支付方式是否限定用户用户信用卡 (这个可以空着) public static String limit_pay=""; //扫描支付不需要可以空着 public static String openid=""; //场景信息(可以空着) public static String scene_info="";
创建一个 WeiXinCommonUtil.java 名字可以随意哈。
public static String weixinPay(String orderNumber,String clientIP,int totalFee){ SortedMap<String, Object> parameters =new TreeMap<String, Object>(); parameters.put("appid", WeiXinConfig.appid); parameters.put("body", WeiXinConfig.body); parameters.put("mch_id", WeiXinConfig.mch_id); parameters.put("nonce_str", WeiXinPayCommonUtil.genNonceStr()); parameters.put("notify_url", WeiXinConfig.notify_url); parameters.put("out_trade_no", orderNumber);//订单号 parameters.put("spbill_create_ip", clientIP);//用户IP parameters.put("total_fee", totalFee+"");//金额 parameters.put("trade_type", WeiXinConfig.trade_type); //生成签名 parameters.put("sign", WeiXinPayCommonUtil.createSign("UTF-8", parameters)); //生成xml请求 String reXml= WeiXinPayCommonUtil.getRequestXml(parameters); System.out.println(reXml); //请求xml String xml= HttpRequest.sendPost(WeiXinConfig.gatewayUrl, reXml); //解析xml String codeUrl= WeiXinXMLUtil.readCodeUrl(xml); if("error".equals(codeUrl)){ return codeUrl; } return codeUrl; }
创建一个 WeiXinPayCommonUtil.java
public static String createSign(String characterEncoding, SortedMap<String, Object> parameters) { StringBuffer sb = new StringBuffer(); Set es = parameters.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String k = (String) entry.getKey(); Object v = entry.getValue(); if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(k + "=" + v + "&"); } } sb.append("key=" + WeiXinConfig.key);// 最后加密时添加商户密钥,由于key值放在最后,所以不用添加到SortMap里面去,单独处理,编码方式采用UTF-8 String sign = WeiXinMD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase(); return sign; } public static String getRequestXml(SortedMap<String, Object> parameters) { StringBuffer sb = new StringBuffer(); sb.append("<xml>"); Set es = parameters.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 ("sign".equalsIgnoreCase(k)) { } else if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k)) { sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">"); } else { sb.append("<" + k + ">" + v + "</" + k + ">"); } } sb.append("<" + "sign" + ">" + "<![CDATA[" + parameters.get("sign") + "]]></" + "sign" + ">"); sb.append("</xml>"); return sb.toString(); } public static String genNonceStr() { Random random = new Random(); return WeiXinMD5Util.MD5Encode(String.valueOf(random.nextInt(10000)), ""); }创建 WeiXinMD5Util.java
private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb = new StringBuffer(); for (int i = 0; i < b.length; i++) resultSb.append(byteToHexString(b[i])); return resultSb.toString(); } private static String byteToHexString(byte b) { int n = b; if (n < 0) n += 256; int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; } public static String MD5Encode(String origin, String charsetname) { String resultString = null; try { resultString = new String(origin); MessageDigest md = MessageDigest.getInstance("MD5"); if (charsetname == null || "".equals(charsetname)) resultString = byteArrayToHexString(md.digest(resultString.getBytes())); else resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); } catch (Exception exception) { } return resultString; } private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d","e", "f" };
ok 到此 代码已经贴出,WeiXinConfig 返回的codeUrl 就是我们需要的这个生成一下二维码,用扫描就可以支付了。
相关文章推荐
- 对接支付宝接口开发详细步骤
- 对接支付宝支付接口开发详细步骤
- 微信公众平台开发(1) 配置接口(微信公众平台搭建php开发配置详细步骤讲解)
- Java项目开发中Eclipse新建工作空间后的配置详细步骤
- AXI-Stream接口开发详细流程
- ArcGIS接口详细说明之个人开发心得
- java对文档等、附件在线预览的详细开发步骤解析:openOffice+SwfTools+FlexPaper
- ArcGIS Engine开发之旅04---ARCGIS接口详细说明
- CAA开发创建workshop/workbench应用程序的详细步骤(1)
- ebay api接口开发基本步骤
- 【实践驱动开发2-001】wifi 在android 下的实现 - AR6000 系列移植详细步骤
- TopCoder Getting Started in Component Development Competitions(组件开发详细步骤)
- 【Linux开发】【Qt开发】ARM QT移植详细步骤教程
- Linux(ubuntu)下配置Opencv3.1.0开发环境的详细步骤
- TIPTOP下开发webservice接口步骤(开发、测试)
- NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
- JNI开发应该是最详细的步骤了
- iOS开发:开发者账号申请后真机调试详细步骤
- v4l2的开发详细步骤