最近由于项目需要集成微信支付,这里记录一下集成过程中的步骤。

要集成微信支付首先需要到微信开发者平台注册企业开发者。注册成功之后,收集项目用的唯一id,iOS为Boundle ID,Android为包名。然后在开发中心创建应用,得到项目的AppId、MchId-商户账户,获取支付能里后,从邮件中得到、AppSercret-商户密钥,32位字符串,在商户平台中设置。得到这三个值后就可以开始开发了。

本实例仅仅完成了调起微信完成支付的过程,后续的成功支付之后的回调没有完善。

一、客户端,此处以iOS代码示例

1、将得到的AppId设置为iOS工程的Schemes,然后设置正确的Boundle ID。

2、按照官网的文档,将微信支付的SDK集成到现有项目中,然后在任意页面添加一个按钮,用来调起微信支付。代码如下。

NSString *res = [WXApiRequestHandler jumpToBizPay];if( ![@"" isEqual:res] ){UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"支付失败" message:res delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[alter show];}
//
//  WXApiRequestHandler.m
//  PayDemo
//
//  Created by yb on 2017/2/27.
//  Copyright © 2017年 yb. All rights reserved.
//#import "WXApiRequestHandler.h"
#import "WXApi.h"@implementation WXApiRequestHandler+ (NSString *)jumpToBizPay {//============================================================// V3&V4支付流程实现// 注意:参数配置请查看服务器端Demo// 更新时间:2015年11月20日//============================================================NSString *urlString   = @"http://192.168.2.67:8080/WXPay/WXPay/getPreyId.do";//解析服务端返回json数据NSError *error;//加载一个NSURL对象NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];//将请求的url数据放到NSData对象中NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];if ( response != nil) {NSMutableDictionary *dict = NULL;//IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];NSLog(@"url:%@",urlString);if(dict != nil){NSMutableString *retcode = [dict objectForKey:@"retcode"];if (retcode.intValue == 0){NSMutableString *stamp  = [dict objectForKey:@"timestamp"];//调起微信支付PayReq* req             = [[PayReq alloc] init];req.partnerId           = [dict objectForKey:@"partnerid"];req.prepayId            = [dict objectForKey:@"prepayid"];req.nonceStr            = [dict objectForKey:@"noncestr"];req.timeStamp           = stamp.intValue;req.package             = [dict objectForKey:@"package"];req.sign                = [dict objectForKey:@"sign"];[WXApi sendReq:req];//日志输出NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );return @"";}else{return [dict objectForKey:@"retmsg"];}}else{return @"服务器返回错误,未获取到json对象";}}else{return @"服务器返回错误";}
}@end

至此,微信支付客户端的事情就简单的完成了,下面是服务端的简单实例。

二、服务端

服务端需要注意的事情是从微信获取预支付订单的时候,签名的参数一定要按照官网指定的参数循序,不然顺序不对,签名的MD5值就不对了。从微信拿到支付id之后,需要将参数再次签名后给客户端返回,此时参与签名的有7个参数。下面给出官网提供的签名验证工具地址。二次签名的时候参数顺序也不能错。

http://mch.weixin.qq.com/wiki/tools/signverify/

@RequestMapping("/getPreyId.do")public void getPreyId(HttpServletRequest request, HttpServletResponse response) throws IOException{SortedMap<String, String> reqMap = new TreeMap<String, String>();reqMap.put("appid", WeiChartConfig.AppId);//必填reqMap.put("mch_id", WeiChartConfig.MchId);//必填reqMap.put("nonce_str", MD5Util.getRandomStringByLength(32));reqMap.put("body", "交易-在线支付");reqMap.put("device_info","WEB");reqMap.put("sign_type", "MD5");reqMap.put("out_trade_no", MD5Util.getCurrTime()+1); //商户系统内部的订单号,reqMap.put("total_fee", "100"); //订单总金额,单位为分     必填  必填  必填  重要的事情说3遍reqMap.put("product_id", "11111");reqMap.put("spbill_create_ip", MD5Util.getHostIp()); //用户端实际ipreqMap.put("notify_url", "http://*.*.*.*:8080/WXPay/resultInfo.do"); //通知地址reqMap.put("trade_type", "APP"); //交易类型String sign = MD5Util.getSign(reqMap, WeiChartConfig.AppSercret);String reqStr = MD5Util.parseString2Xml(reqMap,sign);String getInfo = HttpClientUtil.postHtpps(WeiChartConfig.PrepayUrl, reqStr);Map<String, String> map = Snippet.getResult(getInfo);JSONObject jsonObject1 = JSONObject.fromObject(map);System.out.println("微信返回过来的所有数据====="+jsonObject1);Map<String,String> responseMap = new LinkedHashMap<String, String>();responseMap.put("appid", map.get("appid"));responseMap.put("noncestr", map.get("nonce_str"));responseMap.put("package", "Sign=WXPay");responseMap.put("partnerid", map.get("mch_id"));responseMap.put("prepayid", map.get("prepay_id"));responseMap.put("timestamp", "1489572241");String signAgain = MD5Util.getSign(responseMap, WeiChartConfig.AppSercret);responseMap.put("sign", signAgain);JSONObject jsonObject = JSONObject.fromObject(responseMap);response.setCharacterEncoding("gb2312");PrintWriter out = response.getWriter();out.println(jsonObject);System.out.println("返回给客户端的数据======"+jsonObject);}
/*** 获取签名 md5加密(微信支付必须用MD5加密)* 获取支付签名* @param responseMap* @return*/public static String getSign(Map<String, String> responseMap,String key){String sign = null;StringBuffer sb = new StringBuffer();Set es = responseMap.entrySet();Iterator iterator = es.iterator();while(iterator.hasNext()){Map.Entry entry = (Map.Entry)iterator.next();String k = (String)entry.getKey();String v = (String)entry.getValue();if (null != v && !"".equals(v) && !"sign".equals(k)&& !"key".equals(k)) {sb.append(k+"="+v+"&");}}sb.append("key="+key);System.out.println("签名结果:" + sb.toString());sign = MD5Util.MD5Encode(sb.toString(), "UTF-8").toUpperCase();return sign;}

完善好之后,客户端就能够打开微信进行支付了。

微信支付-简易实例代码相关推荐

  1. h5聊天页面 jquery_HTML5仿微信聊天界面、微信朋友圈实例代码

    这几天使用H5开发了一个仿微信聊天前端界面,尤其微信底部编辑器那块处理的很好,使用HTML5来开发,虽说功能效果并没有微信那么全,但是也相当不错了,可以发送消息.表情,发送的消息自动回滚定位到底部,另 ...

  2. java接受微信回调_SpringMvc微信支付回调示例代码

    介绍 大家都知道微信支付的回调链接要求不能跟参数,但又要接收返回的xml数据.我开始使用@RequestBody注解在参数上,希望能获取xml数据,测试失败.最后使用HttpServletReques ...

  3. java版app微信支付服务端代码【手机app微信支付】

    老早就像做支付模块的东西,因为觉得很高大上,很早就开始把微信支付模块的重心签名给做好了,一直就缺个商家的key,现在有幸来电商公司,哈哈,果然一切很顺利,能够很给力地App端提供支持: 个人觉得核心部 ...

  4. APP 微信支付java后台代码(解决支付失败返回-1)

    开发之前的准备工作: APP支付申请条件 申请成为APP支付商户需要满足以下条件: 1.APP支付商户,须拥有微信开放平台(http://open.weixin.qq.com)的APPID: 2.AP ...

  5. php的微信登录示例代码,关于微信用户注册登录实例代码汇总

    这篇文章主要介绍了.NET微信开发之PC 端微信扫码注册和登录功能实现的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下一.前言先声明一下,本文所注重点为实现思路,代码及数据库设计主要为了展 ...

  6. php APP微信支付流程,PHP实现APP微信支付的实例讲解

    一.PHP后台后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付! 官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.ph ...

  7. Java对接彩虹易支付,第三方支付,实例代码

    相信很多个人开发者都没有资质去申请微信.支付宝.支付.那么这时候只有使用第三方支付了. 第三方支付也有很多种,那么这个文章只介绍彩虹易支付. 通常他们官方接口文档只有PHP SDK,并没有Java的. ...

  8. 微信支付+服务器+php代码,php 微信支付企业付款(示例代码)

    /** * 格式化参数格式化成url参数*/ public function ToUrl($arr) {$buff = "";foreach ($arr as $k => $ ...

  9. html微信支付功能代码,H5调起微信支付功能(示例代码)

    第一步:需要后端返回需要的以下参数: 该操作是你提交完订单信息后在接口所返回的json, 其次将其存储起来,我用的localStorage var payParams = { "appId& ...

  10. 二维码扫码登录详解【附简易实例代码(html+php+ios)】

    1.前言 我们在写一个不太了解的新功能的时候,又稳又快的一个方法就是借(chao)鉴(xi)其他的人的实现方法.所以我们先不急着开始写代码,先看一下各互联网巨头都是如何实现的. 首先来看一下淘宝的扫码 ...

最新文章

  1. SSH无需密码密钥登录
  2. sql server 常用函数
  3. android软件查找号码位置,如何在Android中通过GPS获取位置时获取卫星名称或号码?...
  4. ML 04、模型评估与模型选择
  5. Arthas 初探--安装初步适用
  6. 【知识星球】3D网络结构解读系列上新
  7. python使用hash256加密验证字符串
  8. Java编写程序将数据存入Kafka中
  9. vs code linux 权限,在linux系统中安装VSCode(Visual Studio Code)
  10. struts 国际化
  11. 模式识别工具箱安装及使用
  12. 可区分英文字母:lL、iI、0Oo的系统字体
  13. Flask-Caching使用redis缓存后端加速页面重载
  14. 麒麟v10安装达梦数据库
  15. 工作一周随笔记———一个即将踏入编程的少年
  16. 嵌入式设备NFS挂载目录(基于iTop 4412)
  17. cadence常见技巧和错误。。。
  18. word文档图片画红线_在Word中巧妙绘制漂亮分割线的方法
  19. 关键链方法的多项目监控技术
  20. 纯css实现文字跳动的动画效果

热门文章

  1. C语言中的除法运算符( /)
  2. 二维码收款系统即时到账个人码免签支付平台
  3. Speedoffice(word)如何绘制流程图
  4. cad卸载_3分钟搞定CAD无法卸载问题,CAD卸载不再是烦恼
  5. matlab如何导入大量数据
  6. C语言处理中文字符,C语言中关于汉字的处理
  7. 【Excel】Excel条件格式设置背景色
  8. 用 QT实现拖放(drag-drop)功能
  9. 基于ISIS路由协议的路由聚合
  10. 【Java】# Java对图片进行base64编解码