您当前的位置:首页>支付接口相关>企业签约接口

对接官方签约微信支付接口开发详细步骤教程

来源:官方接口教程 发布时间:2021-06-29 14:47:24作者:微信支付签约热度:9 ℃

1、第一步
我们需要从哪里入手,当然我们需要有微信商家账号怎样申请商家账号呢,当然还是需要有一个已经审核过的微信公众号,这样的话,首先你必须先有个审核通过的微信公众号,这里就不说怎么审核公众号了这个公众号比较好弄。

如何申请微信商户号(如图)
在这里插入图片描述从微信公众号 申请商户支付账户 点击微信支付(跳转到微信支付信息填写提交)根据提示填写即可

填写好信息需要等待审核,这里就不多做解释了(下图申请成功后的截图)

在这里插入图片描述
当显示为审核通过会在您这边指定的邮箱里会收到如下图展示的邮件信息
在这里插入图片描述现在就可以登录商户支付平台进行设定信息了(如图进行登录)

第一次需要安装证书,根据提示安装即可。安装好后点击(如下图)秘钥进行设定
在这里插入图片描述设定好秘钥后要记住,这个开发的时候会使用到。

2、第二步开发(到此上面的商户号就已经可以使用了)

 创建一个WeiXinConfig.java 这里是微信的一些配置信息
 [java] view plain copy



<code class="language-java"><span>  </span>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="";</code>  
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

创建一个 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;

}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

创建一个 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)), "");

}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283

创建 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" };1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859

ok 到此 代码已经贴出,WeiXinConfig 返回的codeUrl 就是我们需要的这个生成一下二维码,用扫描就可以支付了。


转载请注明来源网址:https://www.bdjcwl.cn/qyjk/781.html本文标题:对接官方签约微信支付接口开发详细步骤教程