나는 요즘 쓴 WeChat 지불에 대한 블로그를 읽었으며, 그것을 읽는 사람들이 꽤 많이 있습니다. 블로그가 충분히 상세하지 않거나 무슨 일이 일어나고 있는지 모르겠습니다. 그들 대부분은 나에게 소스 코드를 요구합니다. 프로그래머는 여전히 그러한 사고 과정이 필요하다고 생각하므로 소스 코드를 직접 제공하지 않았습니다. 말하면서“사람들에게 낚시하는 것보다 낚시하는 방법을 가르치는 것이 좋습니다.” 따라서 기사를 읽는 동안 코드를 직접 대표하는 데 시간이 걸립니다. 좋아, 말도 안되는 말을하지 말자. 이번에는 Wechat Cash Red Envelope 인터페이스의 사용을 공유 할 것입니다.
다음은 WeChat 개발 문서의 현금 빨간 봉투 소개입니다.
Cash Red Envelopes는 WeChat Payment Merchant 플랫폼에서 제공하는 마케팅 도구 중 하나입니다. 출시 이후, 그들은 가맹점과 사용자들에게 사랑을 받았습니다. 판매자는이 플랫폼을 통해 현금 빨간 봉투를 WeChat 지불 사용자에게 배포 할 수 있습니다. 사용자가 빨간색 봉투를받은 후, 자금은 사용자의 WeChat 지불 변경 계정에 도착하며, 이는 코인 지갑의 다른 자금과 동일한 사용 수출을합니다. 사용자가 수신하지 않으면 24 시간 후에 자금이 가맹점의 WeChat 지불 계좌로 반환됩니다.
제품 의미
WeChat 지불 현금 빨간 봉투는 현금으로 자금을 운반하는 방식 때문에 항상 사용자가 선호했습니다. 최근 몇 년 동안 현금 빨간 봉투는 중요한 역할을 해왔습니다. 그들은 또한 일상 운영에서 상인의 마케팅 활동에 따뜻한 응답을 가져 왔습니다. 일반적으로 현금 빨간 봉투는 다음을 포함하되 이에 국한되지 않는 시나리오에서 중요한 역할을합니다.
요약하면, Wechat Cash Red Envelopes는 공식 계정, 등록 등을 따라 사용자 끈적함을 높일 수있는 마케팅 도구입니다. 이번에는 프로그램 개발의 관점에서 경험을 공유하는 데 중점을 둡니다.
1. Wechat Cash Red Envelope 함수 사용에 필요한 조건
1. Wechat 판매자 플랫폼과 완전한 비밀 인증서가 있습니다.
2. 판매자는 사용하기에 충분한 균형이 필요합니다 (충분하지 않으면 판매자 플랫폼에서 재충전 할 수 있습니다).
3. WeChat 지불을위한 더 나은 개발 재단
두 번째 개발의 핵심 요점과 어려움
1 WeChat 서명 알고리즘
2 httppclient 및 인증서 사용
3 WeChat 문서 읽기 (https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3)
Wechat H5 결제가 있거나 QR 코드를 스캔하여 지불하는 경우 케이크 조각 인 문서 의이 부분을 읽을 수 있습니다. 이해하기 쉽습니다. 동시에, 당신이 httpclient에 대한 지식을 마스터하는 한, 모든 것이 준비 될 것입니다.
세 가지 직접 코드
public static void sendredpack (문자열 mch_billno, 문자열 openid, 문자열 send_name, string total_fee, string total_num, string wising, string act_name, 문자열 참고, 문자열 ip) 예외 {string non = paycommonutil.createnoncest (); SortedMap <객체, 개체> p = new Treemap <개체, 개체> (); 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 ( "소원", 소원); P.put ( "비고", 비고); 문자열 부호 = paycommonutil.createsign ( "UTF-8", p); System.out.println (부호); p.put ( "부호", 부호); 문자열 reuqestxml = paycommonutil.getRequestxml (p); keystore keystore = keystore.getInstance ( "PKCS12"); fileInputStream instream = new FileInputStream (새 파일 (configutil.cert_path)); {keystore.load (instream, configutil.mch_id.tochararray ()); } 마침내 {enterstream.close (); } sslcontext sslcontext = sslcontexts.custom (). loadkeymaterial (keystore, configutil.mch_id.tochararray ()). build (); sslconnectionsocketFactory sslsf = new sslConnectionSocketCocketFactory (sslContext, new String [] { "tlsv1"}, null, sslconnectionSocketFactory.Browser_COMPATIBE_HOSTNAME_VERIFIER); Closeblehttpclient httpclient = httpclients.custom () .setsslsocketfactory (sslsf) .build (); {httppost httppost = new httppost ( "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); // 환불 인터페이스 httppost.addheader ( "content-type", "application/x-ww-form-urlencep-8"; System.out.println ( "실행 요청" + httppost.getRequestline ()); // 요청 된 XML은 ISO8859-1 인코딩으로 트랜스 코딩되어야합니다. 그렇지 않으면 빨간색 봉투 표시 오류에 서명 오류 또는 텍스트가 발생하기 쉽습니다. smartentity reqentity = new String (reuqestxml.getBytes (), "ISO8859-1"); // 유형 httppost.setentity (reqentity); CloseableHttPresponse 응답 = httpclient.execute (httppost); {httpentity entity = response.getentity (); System.out.println ( "-------------------------------------------------------- System.out.println (response.getStatusline ()); if (entity! = null) {system.out.println ( "응답 내용 길이 :" + entity.getContentLength ()); bufferedReader bufferedReader = new bufferedReader (new inputStreamReader (entity.getContent (), "UTF-8"); 문자열 텍스트; while ((text = bufferedReader.Readline ())! = null) {system.out.println (text); }} entityutils.consume (엔티티); } 마침내 {response.close (); }} 마침내 {httpclient.close (); }} 다음과 같은 점은 다음과 같습니다.
// 요청 된 XML은 ISO8859-1 인코딩으로 변환해야합니다. 그렇지 않으면 빨간색 봉투의 오류 또는 텍스트 디스플레이에 서명하기 쉽습니다.
엄격한 reqentity = new Stringentity (새 String (reuqestxml.getBytes (), "iso8859-1");
이 장소는 거의 나를 추락하고 다양한 디버깅을 시도했다고합니다. 시도하고 보는 태도로 그것을 추가해도 괜찮을 것입니다. 이는 데이터 전송에서 HTTPCLIENT와 기본 HTTPSConnection의 차이 때문일 수 있습니다. 여기에는 많은 연구가 없습니다.
다음과 마찬가지로이 방법을 호출하는 것이 더 쉽습니다
public static void main (String args []) {try {sendredpack ( "12828839012016101420", "수신자의 openid", "xxx", "100", "1", "매년 부자가되는 것에 대한 축하,", "새해의 빨간 봉투", "새해의 붉은 봉인은", "127.0.0.1); } catch (예외 e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }} 레드 봉투가 전송 된 후 인쇄 된 정보는 다음과 같습니다.
TTP/1.1 200 OK 응답 내용 길이 : 567 <xml> <return_code> <! <MCH_BILLNO> <! [CDATA [12828839012016101421]> </MCH_BILLNO> <MCH_ID> <! <re_openid> <! [cdata [xxxx]]> </re_openid> <tatle_amount> 100 </total_amount> <send_listid> <!
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.