
最近开发了微信公众号支付. 由于这是第一次微信支付java开发详细,它也花了几天的时间进行探索,并且只达到了实现功能的水平,并且没有考虑太多的性能问题. 适合初学者.
微信公众号的整体支付实际上非常简单,大致分为三个步骤. 第一步需要获得用户授权;第二步微信支付java开发详细,调用统一订购界面获取预付款标识. 第三步H5调用微信支付的内置js. 下面介绍每个特定步骤的开发过程.

首先,我们必须确保微信公众号支付属于该支付的网络版本,因此与直接调用微信支付的应用程序相比,还需要微信授权的一个步骤. 也就是说,您需要获取用户的openid. 微信公众号使用的交易类型为JSAPI,因此统一订单界面的文档写得很清楚


因此,我们必须获取openid,我们还可以处理所需的一些逻辑. 有两种获取用户授权的方法: 1.scope = snsapi_base; 2.scope = snsapi_userinfo. 我使用snsapi_base
ScopeΪsnsapi_base

ScopeΪsnsapi_userinfo
微信官方文档也对每个参数进行了详细说明. 我将仔细解释关键参数. 首先,appid不会说太多. 您的微信公众号的appid是固定的. 参数redirect_uri是最重要的. 该地址是访问您的处理的接口的地址. 您可以在此链接上拼接所需的参数. 通常,您需要将订单金额转移到此界面. 当您访问此链接时,微信会为您提供代码. 您需要使用它来获取openid. 它执行urlencode处理. 状态参数可以理解为扩展字段,而其他参数是书面形式固定的,因此我将不再对其进行介绍. 下面是获取openid的代码段.

//获取openId
HttpClientUtil util = HttpClientUtil.getInstance();
Map<String, String> map = new HashMap<String, String>();
map.put("appid", WxPayConfig.APPID);
map.put("secret", WxPayConfig.APPSECRET);
map.put("code", code);
map.put("grant_type", WxPayConfig.GRANT_TYPE);
String returnStr = util.doPostRetString("https://api.weixin.qq.com/sns/oauth2/access_token", null,map);
logger.info("returnStr:[" + returnStr + "]");
AccessToken at = JSON.parseObject(returnStr, AccessToken.class);
AccessToken.java
public class AccessToken {
private String access_token;
private String expires_in;
private String refresh_token;
private String openid;
private String scope;
private String unionid;
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public String getExpires_in() {
return expires_in;
}
public void setExpires_in(String expires_in) {
this.expires_in = expires_in;
}
public String getRefresh_token() {
return refresh_token;
}
public void setRefresh_token(String refresh_token) {
this.refresh_token = refresh_token;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getUnionid() {
return unionid;
}
public void setUnionid(String unionid) {
this.unionid = unionid;
}
@Override
public String toString() {
return "AccessToken [access_token=" + access_token + ", expires_in="
+ expires_in + ", refresh_token=" + refresh_token + ", openid="
+ openid + ", scope=" + scope + ", unionid=" + unionid + "]";
}
}
第二,获得openid之后,我们可以进行下一步统一订单开发. 微信上的统一订单界面文档更加详细,我不会介绍更具体的参数含义. 最直观的代码直接在下面发布. 特别提醒您注意正确的签名. 用于签名的密钥不是AppSecret,而是您在应用时定义的商户密钥.
//统一下单
WxPaySendData data = new WxPaySendData();
data.setAppid(WxPayConfig.APPID);
data.setAttach("微信支付");
data.setBody("微信公众号支付");
data.setMch_id(WxPayConfig.MCHID);
data.setNonce_str(nonceStr);
data.setNotify_url(WxPayConfig.NOTIFY_URL);
data.setOut_trade_no(tradeNo);
data.setTotal_fee((int)(fee*100));//单位:分
data.setTrade_type("JSAPI");
data.setSpbill_create_ip(ip);
data.setOpenid(at.getOpenid());
String returnXml = UnifiedorderService.unifiedOrder(data,WxPayConfig.KEY);
WxPayReturnData reData = new WxPayReturnData();
XStream xs1 = new XStream(new DomDriver());
xs1.alias("xml", WxPayReturnData.class);
reData = (WxPayReturnData) xs1.fromXML(returnXml);
UnifiedorderService.java
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/sanxing/article-205870-1.html
苏联当初的忘我好也是先警告后撞击的