吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6263|回复: 13
收起左侧

[其他转载] 【笔记】微信支付 第二弹SDK-两行代码解决支付

  [复制链接]
allam 发表于 2016-5-7 10:27
本帖最后由 奋斗丶小Z 于 2016-6-6 13:51 编辑

其实我发这类的文章只是想跟大家分享一下自己这方面的一些经验!这类文章都是有关于微信商户对接的技术文章 看不懂的应该多学习这方面的知识,不然我跟你解释千万遍也是徒劳的!

今天这篇文章是关于微信SDK的文章 同样的我也会跟大家分享代码  希望对大家有所帮助!
背景让使用微信支付的朋友最快速度接入微信支付.
核心两行代码解决微信支付提供的各种服务, 开箱即用, 可扩展性超强(只需根据服务的上下行协议定义协议类后, 放入工厂即可获取调用结果).
架构图   


  • 项目源代码
    • 源码地址 http://wocoding.com/item.htm?hashId=wZlZgM81
    目前支持的服务及调用示例所有服务在单元测试类(WXPayClientTest.java)中均已测试通过, 下行参数response.isSuccess == true表示服务调用成功.
    扫码支付
  • 文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
  • String nonceStr = SDKUtils.genRandomStringByLength(32);UnifiedOrderRequest request = new UnifiedOrderRequest("wuspace-899",SDKUtils.genOutTradeNo(),1, "192.168.1.1", asyncNotifyUrl, "NATIVE", nonceStr);UnifiedOrderResponse response = wxPayClient.execute(request);Assert.assertNotNull(response);LOG.info(JSON.toJSONString(response));// TODO 开发人员根据 response中的属性值处理业务逻辑, 此处可完美嵌入业务层(小型系统)或服务层(大型系统)
    公众号支付
  • 文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
  • String nonceStr = SDKUtils.genRandomStringByLength(32);
    UnifiedOrderRequest request = new UnifiedOrderRequest("wuspace-899",SDKUtils.genOutTradeNo(),
    1, "192.168.1.1", asyncNotifyUrl, "JSAPI", nonceStr);
    request.setOpenId("oKVmeuHht8J0Ni58CSNe474AHA3E");
    UnifiedOrderResponse response = wxPayClient.execute(request);
    Assert.assertNotNull(response);LOG.info(JSON.toJSONString(response));// TODO 开发人员根据 response中的属性值处理业务逻辑, 此处可完美嵌入业务层(小型系统)或服务层(大型系统)
    APP支付
  • 文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

  • String nonceStr = SDKUtils.genRandomStringByLength(32);
    UnifiedOrderRequest request = new UnifiedOrderRequest("wuspace-899",SDKUtils.genOutTradeNo(),               
    1, "192.168.1.1", asyncNotifyUrl, "APP", nonceStr);UnifiedOrderResponse response = wxPayClient.execute(request);Assert.assertNotNull(response);LOG.info(JSON.toJSONString(response));// TODO 开发人员根据 response中的属性值处理业务逻辑, 此处可完美嵌入业务层(小型系统)或服务层(大型系统)


商家支付
文档详见: https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
String nonceStr = SDKUtils.genRandomStringByLength(32);
String customerOpenId = "oKVmeuHht8J0Ni58CSNe474AHA3E";
MchPayRequest mchPayRequest = new MchPayRequest(SDKUtils.genOutTradeNo(),               
customerOpenId, "NO_CHECK", 100, "xxxx年xx月结算", "192.168.1.1", nonceStr);MchPayResponse response = wxPayVIPClient.execute(mchPayRequest);Assert.assertNotNull(response);LOG.info(JSON.toJSONString(response));// TODO 开发人员根据 response中的属性值处理业务逻辑, 此处可完美嵌入业务层(小型系统)或服务层(大型系统)
退款
文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_4&index=6
String nonceStr = SDKUtils.genRandomStringByLength(32);
RefundRequest request = new RefundRequest("T15121416014891124211768",               
SDKUtils.genOutRefundNo(), 1, 1, "112102020", nonceStr);RefundResponse response = wxPayVIPClient.execute(request);
Assert.assertNotNull(response);
LOG.info(JSON.toJSONString(response));// TODO 开发人员根据 response中的属性值处理业务逻辑, 此处可完美嵌入业务层(小型系统)或服务层(大型系统)

支付异步通知解析
文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7
String notifyTxt = "<xml>\n" +
                "  <appid><![CDATA[wx2421b1c4370eccdcd]]></appid>\n" +
                "  <attach><![CDATA[支付测试]]></attach>\n" +
                "  <bank_type><![CDATA[CFT]]></bank_type>\n" +
                "  <fee_type><![CDATA[CNY]]></fee_type>\n" +
                "  <is_subscribe><![CDATA[Y]]></is_subscribe>\n" +
                "  <mch_id><![CDATA[10000100]]></mch_id>\n" +
                "  <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>\n" +
                "  <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>\n" +
                "  <out_trade_no><![CDATA[1409811653]]></out_trade_no>\n" +
                "  <result_code><![CDATA[SUCCESS]]></result_code>\n" +
                "  <return_code><![CDATA[SUCCESS]]></return_code>\n" +
                "  <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>\n" +
                "  <sub_mch_id><![CDATA[10000100]]></sub_mch_id>\n" +
                "  <time_end><![CDATA[20140903131540]]></time_end>\n" +
                "  <total_fee>1</total_fee>\n" +
                "  <trade_type><![CDATA[JSAPI]]></trade_type>\n" +
                "  <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>\n" +
                "</xml>";
PayNotifyResponse response = wxPayClient.parseNotify(notifyTxt, PayNotifyResponse.class);
Assert.assertNotNull(response);
LOG.info(JSON.toJSONString(response));
// TODO 开发人员根据 response中的属性值处理业务逻辑, 此处可完美嵌入业务层(小型系统)或服务层(大型系统)


扩展
该SDK设计了一个服务工厂, 该工厂中包含HTTP执行器/返回数据解析方式(json/xml)/入参数据格式(json/xml)构造等,
开发人员需要增加服务仅需要根据服务协议文档编写上下行协议, 并在协议中指明API接口和返回数据类型, 再将上行协议放入工厂中执行即可;
可参考已完成的服务协议进行扩展编写.

总算编好了!累  写得有些乱大家多包涵!

免费评分

参与人数 2热心值 +2 收起 理由
秋水 + 1 技术文章,谢谢分享!
52PJ之霜木 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
qunima 发表于 2016-5-7 11:03
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| allam 发表于 2016-5-7 11:15
头像被屏蔽
1906 发表于 2016-5-7 11:25
Parker。z 发表于 2016-5-7 11:41
小白 凑热闹
少年多少年 发表于 2016-5-7 11:45
凑个热闹走了
mfk1997 发表于 2016-5-7 11:54
小白来凑个热闹
miye668 发表于 2016-5-7 14:02
当路过...还是看不明白
sy5211314520 发表于 2016-5-7 14:08
感谢分享
挖掘机哪家强 发表于 2016-5-7 14:36 来自手机
膜拜大神\_( ω )_/
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 18:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表