最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java調用微信現金紅包接口的心得與體會總結

 更新時間:2016年11月04日 17:34:22   作者:青蛙小王子  
這篇文章主要介紹了java調用微信現金紅包接口的心得與體會總結,有需要的朋友可以了解一下。

這幾天看了下之前寫的有關微信支付的博客,看的人還是挺多的,看了下留言不知道是因為博客寫的不夠細還是什么情況,大多都找我要源碼,我覺得吧程序員還是需要有這么一個思考的過程,因此沒直接給源碼,俗話說“授人以魚不如授人以漁”。因此希望看文章的同時也花一點時間自己親自敲一敲代碼。好了廢話不多說這次來分享微信現金紅包接口的使用。

下面是微信開發(fā)文檔對現金紅包的介紹:

現金紅包,是微信支付商戶平臺提供的營銷工具之一,上線以來深受廣大商戶與用戶的喜愛。商戶可以通過本平臺向微信支付用戶發(fā)放現金紅包。用戶領取紅包后,資金到達用戶微信支付零錢賬戶,和零錢包的其他資金有一樣的使用出口;若用戶未領取,資金將會在24小時后退回商戶的微信支付賬戶中。

產品意義

微信支付現金紅包因資金的承載方式為現金,一直以來深受用戶的青睞,近年來的春晚中,現金紅包都扮演著重要的角色;在日常運營中也為商戶的營銷活動帶來熱烈的反響。總的來說,現金紅包在包括但不僅限于以下場景中發(fā)揮著重要意義:

  • ◆ 為企業(yè)拉取新用戶、鞏固老用戶關系、提升用戶活躍度
  • ◆ 結合巧妙的創(chuàng)意點子,輔以紅包點綴,打造火爆的活動,提升企業(yè)與品牌知名度
  • ◆ 結合企業(yè)運營活動,以紅包作為獎品,使你的抽獎、滿送等營銷活動更便利進行
  • ◆ 同時,除了營銷之外,現金紅包在企業(yè)日常的運營中也扮演著重要角色。如:為員工返福利、為供應商返利、會員積分/虛擬等級兌現等等

綜上所述微信現金紅包是一種營銷工具,可以通過關注公眾號、注冊等給用戶發(fā)放增加用戶粘性。這次著重從程序開發(fā)方面分享我的心得體會

一  使用微信現金紅包功能需具備的條件

1 擁有微信商戶平臺且秘鑰證書齊全

2 商戶平太需要有足夠的余額可供使用(不夠可以從商戶平臺使用財付通充值)

3 有微信支付開發(fā)基礎更佳

二 開發(fā)的重點和難點

1 微信簽名算法

2 httpclient以及證書的使用

3 微信文檔的閱讀(https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3

如果有微信h5支付或掃碼支付的童鞋看這一部分的文檔可以說是小菜一碟,理解起來不費吹灰之力,同時只要掌握httpclient的知識就萬事俱備了

三  直接擼代碼

public static void sendRedPack(String mch_billno,String openId,String send_name,String total_fee,String total_num,String wishing,String act_name,String remark,String ip) throws Exception{ 
    String non=PayCommonUtil.CreateNoncestr(); 
    SortedMap<Object, Object> p = new TreeMap<Object, Object>(); 
    p.put("nonce_str", non); 
    p.put("mch_billno", mch_billno); 
    p.put("mch_id", ConfigUtil.MCH_ID); 
    p.put("wxappid", ConfigUtil.APPID); 
    p.put("re_openid", openId); 
    p.put("total_amount", total_fee); 
    p.put("total_num", "1"); 
    p.put("client_ip", "127.0.0.1"); 
    p.put("act_name",act_name); 
    p.put("send_name", send_name); 
    p.put("wishing", wishing); 
    p.put("remark",remark); 
     
     
 
    String sign = PayCommonUtil.createSign("UTF-8", p); 
    System.out.println(sign); 
    p.put("sign", sign); 
     
     
    String reuqestXml = PayCommonUtil.getRequestXml(p); 
    KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
    FileInputStream instream = new FileInputStream(new File(ConfigUtil.CERT_PATH)); 
    try { 
      keyStore.load(instream, ConfigUtil.MCH_ID.toCharArray()); 
    } finally { 
      instream.close(); 
    } 
 
    SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, 
        ConfigUtil.MCH_ID.toCharArray()).build(); 
    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");// 退款接口 
       
      httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
       
      System.out.println("executing request" + httpPost.getRequestLine()); 
      //請求的xml需轉碼為iso8859-1編碼,否則易出現簽名錯誤或紅包上的文字顯示有誤 
      StringEntity reqEntity = new StringEntity(new String(reuqestXml.getBytes(), "ISO8859-1")); 
      // 設置類型 
     
      httpPost.setEntity(reqEntity); 
      CloseableHttpResponse response = httpclient.execute(httpPost); 
      try { 
        HttpEntity entity = response.getEntity(); 
 
        System.out.println("----------------------------------------"); 
        System.out.println(response.getStatusLine()); 
        if (entity != null) { 
          System.out.println("Response content length: " 
              + entity.getContentLength()); 
          BufferedReader bufferedReader = new BufferedReader( 
              new InputStreamReader(entity.getContent(), "UTF-8")); 
          String text; 
          while ((text = bufferedReader.readLine()) != null) { 
            System.out.println(text); 
          } 
 
        } 
        EntityUtils.consume(entity); 
      } finally { 
        response.close(); 
      } 
    } finally { 
      httpclient.close(); 
    } 
  } 

需要注意的地方是下面這里:
//請求的xml需轉碼為iso8859-1編碼,否則易出現簽名錯誤或紅包上的文字顯示有誤

StringEntity reqEntity = new StringEntity(new String(reuqestXml.getBytes(), "ISO8859-1"));

這個地方可以說把我弄得差點崩潰了各種試,各種調試還是抱著試一試的心態(tài)加上去就OK了,這個可能是因為httpclient和原生的HttpsConnection在數據傳輸上的不同吧。這里沒做過多的研究。

調用這個方法就更簡單了直接像下面這樣

public static void main(String args[]){ 
    try { 
       
      sendRedPack("12828839012016101420","接收者的openid","xxx","100","1","恭喜發(fā)財,年年有余","新年紅包","新年紅包還不快搶","127.0.0.1"); 
    } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
} 

紅包發(fā)送后打印的信息如下:

TTP/1.1 200 OK 
Response content length: 567 
<xml> 
<return_code><![CDATA[SUCCESS]]></return_code> 
<return_msg><![CDATA[發(fā)放成功]]></return_msg> 
<result_code><![CDATA[SUCCESS]]></result_code> 
<err_code><![CDATA[SUCCESS]]></err_code> 
<err_code_des><![CDATA[發(fā)放成功]]></err_code_des> 
<mch_billno><![CDATA[12828839012016101421]]></mch_billno> 
<mch_id><![CDATA[1282883901]]></mch_id> 
<wxappid><![CDATA[xxxxx]]></wxappid> 
<re_openid><![CDATA[xxxx]]></re_openid> 
<total_amount>100</total_amount> 
<send_listid><![CDATA[1000041701201610143000090813093]]></send_listid> 
</xml>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 解決ApplicationContext獲取不到Bean的問題

    解決ApplicationContext獲取不到Bean的問題

    這篇文章主要介紹了解決ApplicationContext獲取不到Bean的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • JAVA中的靜態(tài)代理、動態(tài)代理以及CGLIB動態(tài)代理總結

    JAVA中的靜態(tài)代理、動態(tài)代理以及CGLIB動態(tài)代理總結

    本篇文章主要介紹了JAVA中的靜態(tài)代理、動態(tài)代理以及CGLIB動態(tài)代理總結,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • java 過濾器模式(Filter/Criteria Pattern)詳細介紹

    java 過濾器模式(Filter/Criteria Pattern)詳細介紹

    這篇文章主要介紹了java 過濾器模式(Filter/Criteria Pattern)詳細介紹的相關資料,需要的朋友可以參考下
    2016-10-10
  • MyBatis一級緩存與二級緩存原理與作用分析

    MyBatis一級緩存與二級緩存原理與作用分析

    mybatis-plus是一個Mybatis的增強工具,在Mybatis的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,這篇文章帶你了解Mybatis的一級和二級緩存
    2022-12-12
  • 聊聊Redis二進制數組Bitmap

    聊聊Redis二進制數組Bitmap

    這篇文章主要介紹了Redis二進制數組Bitmap,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Feign+mybatisplus搭建項目遇到的坑及解決

    Feign+mybatisplus搭建項目遇到的坑及解決

    這篇文章主要介紹了Feign+mybatisplus搭建項目遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中的3種輸入方式實現解析

    Java中的3種輸入方式實現解析

    這篇文章主要介紹了Java中的3種輸入方式實現解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Mybatis-plus+通用mapper(tk.mybatis)的使用

    Mybatis-plus+通用mapper(tk.mybatis)的使用

    本文主要介紹了Mybatis-plus+通用mapper(tk.mybatis)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2024-03-03
  • SpringMVC中Json數據格式轉換

    SpringMVC中Json數據格式轉換

    本文主要介紹了SpringMVC中Json數據格式轉換的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • java使用poi讀取doc和docx文件的實現示例

    java使用poi讀取doc和docx文件的實現示例

    這篇文章主要介紹了java使用poi讀取doc和docx文件的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03

最新評論

镇康县| 易门县| 壤塘县| 临安市| 惠水县| 焉耆| 绥宁县| 丹江口市| 乌海市| 吴江市| 陕西省| 锡林郭勒盟| 偏关县| 杭锦后旗| 神木县| 漯河市| 法库县| 菏泽市| 富阳市| 普兰店市| 东阿县| 疏附县| 贵溪市| 惠水县| 屯昌县| 攀枝花市| 宝丰县| 晋宁县| 苍南县| 连云港市| 中山市| 衡南县| 台州市| 获嘉县| 从江县| 饶河县| 仲巴县| 保山市| 红安县| 巫山县| 上饶县|