Java开发微信公众号支付

电脑杂谈  发布时间:2020-05-11 03:16:42  来源:网络整理

微信java开发_微信开发教程 java_微信支付java开发详细

最近开发了微信公众号支付. 由于这是第一次微信支付java开发详细,它也花了几天的时间进行探索,并且只达到了实现功能的水平,并且没有考虑太多的性能问题. 适合初学者.

微信公众号的整体支付实际上非常简单,大致分为三个步骤. 第一步需要获得用户授权;第二步微信支付java开发详细,调用统一订购界面获取预付款标识. 第三步H5调用微信支付的内置js. 下面介绍每个特定步骤的开发过程.

微信java开发_微信开发教程 java_微信支付java开发详细

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

微信支付java开发详细_微信开发教程 java_微信java开发

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

ScopeΪsnsapi_base

微信开发教程 java_微信支付java开发详细_微信java开发

ScopeΪsnsapi_userinfo

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

微信开发教程 java_微信支付java开发详细_微信java开发

//获取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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 方玉
        方玉

        苏联当初的忘我好也是先警告后撞击的

      热点图片
      拼命载入中...