tool for work

微信登陆接入(Android/IOS(swift)/Java后台

2018-10-10  本文已影响21人  草丛里的黄盖

本文章仅作为个人笔记

微信Android接入指南,需要登陆后查看(开放平台->资源中心->开发资源->移动应用->接入指南)
微信IOS接入指南,需要登陆后查看(开放平台->资源中心->开发资源->移动应用->接入指南)
微信开放平台
改完info.plist结果如图
            import com.alibaba.fastjson.JSON;
            
            import java.util.*;
            
            public class WechartUtils {
            
                private static final String APP_ID = "";//应用ID
                private static final String CT_NUMBER = "";//商户号
                private static final String SECRET = "";//这些都能从官方文档获取
                private static final String KEY = "";//
                private static final String GET_ACCESS_TOKEN = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
                        + APP_ID + "&secret=" + SECRET + "&code=%s&grant_type=authorization_code";
                private static final String GET_USER_INFO = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s";
                private static final String GET_FIRST_ORDER = "https://api.mch.weixin.qq.com/pay/unifiedorder";
                private static final String GET_ORDER = "https://api.mch.weixin.qq.com/pay/orderquery";
            
                public static boolean checkWXOrder(String orderNumber) {
                    SortedMap<String, String> temp = new TreeMap<String, String>() {
                        {
                            put("appid", APP_ID);//应用ID
                            put("mch_id", CT_NUMBER);//商户号
                            put("nonce_str", MD5Utils.MD5(String.valueOf(System.currentTimeMillis()), false));//随机字符串
                            put("out_trade_no", orderNumber);//商户订单号
                        }
                    };
                    temp.put("sign", getSign(temp));
                    String xml = getXml(temp);
                    byte[] result = HttpUtils.getInstance().postURLResponse(GET_ORDER, null, xml.getBytes());
                    WXPayResponse wxPayResponse = XMLUtils.getObject(new String(result), WXPayResponse.class);
                    return wxPayResponse != null && "SUCCESS".equals(wxPayResponse.getReturnCode())
                            && "SUCCESS".equals(wxPayResponse.getResultCode())
                            && "SUCCESS".equals(wxPayResponse.getTradeState());
                }
            
                public static ResponseWX getWXResponse(String goodsName, String goodsDesc
                        , String orderNumber, String price, String ip) throws Exception {
                    SortedMap<String, String> temp = new TreeMap<String, String>() {
                        {
                            put("appid", APP_ID);//应用ID
                            put("mch_id", CT_NUMBER);//商户号
                            put("nonce_str", MD5Utils.MD5(String.valueOf(System.currentTimeMillis()), false));//随机字符串
                            put("body", goodsName);//商品描述
                            put("attach", goodsDesc);//附加数据
                            put("out_trade_no", orderNumber);//商户订单号
                            put("total_fee", price);//总金额
                            put("spbill_create_ip", ip);//终端IP
                            put("notify_url", "");//这里填写自己的回调通知地址
                            put("trade_type", "APP");//交易类型
                        }
                    };
                    temp.put("sign", getSign(temp));
                    String xml = getXml(temp);
                    byte[] result = HttpUtils.getInstance().postURLResponse(GET_FIRST_ORDER, null, xml.getBytes());
                    WXResponse response = XMLUtils.getObject(new String(result), WXResponse.class);
                    if (response != null && "SUCCESS".equals(response.getReturnCode())
                            && "SUCCESS".equals(response.getResultCode())
                            && response.getPrepayId() != null) {
                        ResponseWX responseWX = new ResponseWX();
                        responseWX.setAppid(response.getAppid());
                        responseWX.setNoncestr(response.getNonceStr());
                        responseWX.setPackageName("Sign=WXPay");
                        responseWX.setPartnerid(response.getMchId());
                        responseWX.setTimestamp(String.valueOf(System.currentTimeMillis() / 1000));
                        responseWX.setPrepayid(response.getPrepayId());
                        responseWX.setSign(getSign(new TreeMap<String, String>() {
                            {
                                put("appid", responseWX.getAppid());//应用ID
                                put("partnerid", responseWX.getPartnerid());//商户号
                                put("noncestr", responseWX.getNoncestr());//商品描述
                                put("package", responseWX.getPackageName());//随机字符串
                                put("prepayid", responseWX.getPrepayid());//商户订单号
                                put("timestamp", responseWX.getTimestamp());//附加数据
                            }
                        }));
                        responseWX.setOrderNumber(orderNumber);
                        return responseWX;
                    }
                    throw new Exception("签名失败");
                }
            
                private static String getXml(SortedMap<String, String> data) {
                    StringBuilder result = new StringBuilder("<xml>");
                    for (Map.Entry<String, String> kv : data.entrySet()) {
                        result.append("<").append(kv.getKey()).append(">").append(kv.getValue())
                                .append("</").append(kv.getKey()).append(">");
                    }
                    return result.append("</xml>").toString();
                }
            
                private static String getSign(SortedMap<String, String> data) {
                    String result = null;
                    if (data != null) {
                        StringBuilder key = new StringBuilder();
                        boolean isFirst = true;
                        for (Map.Entry<String, String> kv : data.entrySet()) {
                            if (isFirst) {
                                isFirst = false;
                            } else {
                                key.append("&");
                            }
                            key.append(kv.getKey());
                            key.append("=");
                            key.append(kv.getValue());
                        }
                        key.append("&key=").append(KEY);
                        return MD5Utils.MD5(key.toString(), false).toUpperCase();
                    }
                    return result;
                }
            
                public static WechartUserResponse getUser(String authCode) {
                    WechartUserResponse result = null;
                    String host = String.format(GET_ACCESS_TOKEN, authCode);
                    byte[] response = HttpUtils.getInstance().getURLResponse(host, null);
                    if (response != null) {
                        AccessTokenResponse accessTokenResponse;
                        try {
                            accessTokenResponse = JSON.parseObject(new String(response), AccessTokenResponse.class);
                        } catch (Exception e) {
                            System.out.println("Format response error.e=" + e + ";response=" + new String(response));
                            return result;
                        }
                        if (accessTokenResponse != null && accessTokenResponse.accessToken != null) {
                            response = HttpUtils.getInstance().getURLResponse(host, null);
                            if (response != null) {
                                host = String.format(GET_USER_INFO, accessTokenResponse.accessToken, accessTokenResponse.openid);
                                response = HttpUtils.getInstance().getURLResponse(host, null);
                                try {
                                    result = JSON.parseObject(new String(response), WechartUserResponse.class);
                                    if (result.unionid == null) {
                                        System.out.println("Get user info error." + ";response=" + new String(response));
                                        result = null;
                                    }
                                } catch (Exception e) {
                                    System.out.println("Format response error.e=" + e + ";response=" + new String(response));
                                }
                            }
                        }
                    }
                    return result;
                }
            
                public static class WechartUserResponse {
                    private String openid;
                    private String nickname;
                    private int sex;
                    private String language;
                    private String city;
                    private String province;
                    private String country;
                    private String headimgurl;
                    private String unionid;
            
                    public String getOpenid() {
                        return openid;
                    }
            
                    public void setOpenid(String openid) {
                        this.openid = openid;
                    }
            
                    public String getNickname() {
                        return nickname;
                    }
            
                    public void setNickname(String nickname) {
                        this.nickname = nickname;
                    }
            
                    public int getSex() {
                        return sex;
                    }
            
                    public void setSex(int sex) {
                        this.sex = sex;
                    }
            
                    public String getLanguage() {
                        return language;
                    }
            
                    public void setLanguage(String language) {
                        this.language = language;
                    }
            
                    public String getCity() {
                        return city;
                    }
            
                    public void setCity(String city) {
                        this.city = city;
                    }
            
                    public String getProvince() {
                        return province;
                    }
            
                    public void setProvince(String province) {
                        this.province = province;
                    }
            
                    public String getCountry() {
                        return country;
                    }
            
                    public void setCountry(String country) {
                        this.country = country;
                    }
            
                    public String getHeadimgurl() {
                        return headimgurl;
                    }
            
                    public void setHeadimgurl(String headimgurl) {
                        this.headimgurl = headimgurl;
                    }
            
                    public String getUnionid() {
                        return unionid;
                    }
            
                    public void setUnionid(String unionid) {
                        this.unionid = unionid;
                    }
            
                    @Override
                    public String toString() {
                        return "WechartUserResponse{" +
                                "openid='" + openid + '\'' +
                                ", nickname='" + nickname + '\'' +
                                ", sex=" + sex +
                                ", language='" + language + '\'' +
                                ", city='" + city + '\'' +
                                ", province='" + province + '\'' +
                                ", country='" + country + '\'' +
                                ", headimgurl='" + headimgurl + '\'' +
                                ", unionid='" + unionid + '\'' +
                                '}';
                    }
                }
            
                private static class AccessTokenResponse {
                    private String accessToken;
                    private int expiresIn;
                    private String refreshToken;
                    private String openid;
                    private String scope;
                    private String unionid;
            
                    public String getAccessToken() {
                        return accessToken;
                    }
            
                    public void setAccessToken(String accessToken) {
                        this.accessToken = accessToken;
                    }
            
                    public int getExpiresIn() {
                        return expiresIn;
                    }
            
                    public void setExpiresIn(int expiresIn) {
                        this.expiresIn = expiresIn;
                    }
            
                    public String getRefreshToken() {
                        return refreshToken;
                    }
            
                    public void setRefreshToken(String refreshToken) {
                        this.refreshToken = refreshToken;
                    }
            
                    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;
                    }
                }
            
            }
上一篇下一篇

猜你喜欢

热点阅读