調用微信現金紅包接口發放紅包


1.通過code獲取到用戶的openid.

引導用戶到指定的授權頁面

例如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=redirect_uri&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

參考文章:http://www.cnblogs.com/ansiboy/p/3755158.html

redirect_uri  為微信調用地址,返回code,然后用code通過下面的地址去換取openid

地址: "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxid&secret=secret&code="
            + code + "&grant_type=authorization_code";

公眾號需獲取網頁授權獲取用戶基本信息權限。

 

2.通過openid及用戶相關信息向用戶發放紅包。

      地址:"https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"

需要發放商戶號用戶openid等相關信息,需要注意的是簽名信息與隨機字符串

代碼如下:

1. public static String createSendRedPackOrderSign(WeixinRedPacket redPack){
            StringBuffer sign = new StringBuffer();
            sign.append("act_name=").append(redPack.getAct_name());
            sign.append("&client_ip=").append(redPack.getClient_ip());
            sign.append("&mch_billno=").append(redPack.getMch_billno());
            sign.append("&mch_id=").append(redPack.getMch_id());
            sign.append("&nonce_str=").append(redPack.getNonce_str());
            sign.append("&re_openid=").append(redPack.getRe_openid());
            sign.append("&remark=").append(redPack.getRemark());
            sign.append("&send_name=").append(redPack.getSend_name());
            sign.append("&total_amount=").append(redPack.getTotal_amount());
            sign.append("&total_num=").append(redPack.getTotal_num());
            sign.append("&wishing=").append(redPack.getWishing());
            sign.append("&wxappid=").append(redPack.getWxappid());
            sign.append("&key=").append("abcdefg123456789abcdefg123456789");
            return DigestUtils.md5Hex(getContentBytes(sign.toString(), "utf-8")).toUpperCase();
        }
      private static String create_nonce_str() {
            return UUID.randomUUID().toString();
        }

 

2.需要注意上傳證書及將所有信息發放給微信,這里還需要使用微信給出的開發包,在微信上下載即可。

 

 Map<String ,String> maps =  new HashMap<String, String>();
           //分享任務完成后,調用發紅包接口,需要傳入商戶訂單號,openid,發放金額三個參數
           WeixinRedPacket bean = new WeixinRedPacket();  
           bean.setNonce_str(create_nonce_str().substring(0, 31));  
           bean.setMch_billno(mch_billno);  
           bean.setMch_id(PayConst.WX_MCH_ID);  
           bean.setWxappid(PayConst.WX_APPID);  
           bean.setSend_name(PayConst.WX_SEND_NAME);  
           bean.setRe_openid(openid);  
           bean.setTotal_amount(amount);//金額分  
           bean.setTotal_num(PayConst.WX_TOTAL_NUM);//發送人數  
           bean.setWishing(PayConst.WX_WISHING);  
           bean.setClient_ip(PayConst.WX_CLIENT_IP);  
           bean.setAct_name(PayConst.WX_ACT_NAME);  
           bean.setRemark(PayConst.WX_REMARK);       
           bean.setSign(createSendRedPackOrderSign(bean));

           String requestJson = "<xml>"
               +"<sign><![CDATA[" + bean.getSign() + "]]></sign>"
               +"<mch_billno><![CDATA[" + bean.getMch_billno() + "]]></mch_billno>"
               +"<mch_id><![CDATA[" + bean.getMch_id() + "]]></mch_id>"
               +"<wxappid><![CDATA[" + bean.getWxappid() + "]]></wxappid>"
               +"<send_name><![CDATA["+ bean.getSend_name() +"]]></send_name>"
               +"<re_openid><![CDATA[" + bean.getRe_openid() + "]]></re_openid>"
               +"<total_amount><![CDATA[" + bean.getTotal_amount() + "]]></total_amount>"
               +"<total_num><![CDATA[" + bean.getTotal_num() + "]]></total_num>"
               +"<wishing><![CDATA[" + bean.getWishing() + "]]></wishing>"
               +"<client_ip><![CDATA[" + bean.getClient_ip() + "]]></client_ip>"
               +"<act_name><![CDATA[" + bean.getAct_name() + "]]></act_name>"
               +"<remark><![CDATA[" + bean.getRemark() + "]]></remark>"
               +"<nonce_str><![CDATA[" + bean.getNonce_str() + "]]></nonce_str>"
               +"</xml>";
KeyStore keyStore = KeyStore.getInstance("PKCS12"); FileInputStream instream = new FileInputStream(new File("D:\\certs\\apiclient_cert.p12")); try { keyStore.load(instream, "123".toCharArray());//123為商戶號 } finally { instream.close(); } // Trust own CA and all self-signed certs SSLContext sslcontext = SSLContexts.custom() .loadKeyMaterial(keyStore, "123".toCharArray()) .build(); // Allow TLSv1 protocol only SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); CloseableHttpClient httpclient = HttpClients.custom() .setSSLSocketFactory(sslsf) .build(); try { HttpPost httppost = new HttpPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); StringEntity s = new StringEntity(requestJson,"UTF-8"); s.setContentEncoding("UTF-8"); s.setContentType("text/xml");//發送json數據需要設置contentType httppost.setEntity(s); CloseableHttpResponse resp = httpclient.execute(httppost); try { HttpEntity entity = resp.getEntity(); if (entity != null) { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent(),"utf-8")); String text; String xmlString = ""; while ((text = bufferedReader.readLine()) != null) { xmlString += text; } //return_code與result_code都為success代表發放紅包成功 maps = XmlParseUtil.parse(xmlString); } EntityUtils.consume(entity); } finally { resp.close(); } } finally { httpclient.close(); }

 

 

微信官方文檔地址:https://pay.weixin.qq.com/helper/cashredopenapi_V2.pdf

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM