微信支付总结

简介

微信支付商户平台官网:https://pay.weixin.qq.com
版权声明:本文为原创文章,未经允许不得转载
更新时间:2016/6/27

本文说明

现在很多项目都会集成微信登陆授权、微信公众号授权或者微信支付,然而当我们根据微信的开发文档进行开发的时候会发现,一个又一个的坑,
尤其是微信支付,demo还是eclipse的,令人捉急。本文仅仅简单介绍一下在公司开发时集成微信APP支付的流程,以及开发中的几个坑。

开发流程

  1. 让产品经理去微信开放平台注册应用,获取AppID、AppSecret,并申请开通微信支付功能。如果开通成功,微信会分配给你的公司一个商户号, 作为支付的账户。
    注意:微信开放平台注册app的时候,需要提供应用的包名和签名,其中应用的签名可以根据微信的开发文档中的方法(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)来获取;整个申请过程需要资质认证等,十分麻烦,大概需要3-5天左右,所以需要提醒产品经理提前申请,当然,如果人家是个资深产品,就不要废话了。
  2. 根据微信支付的文档进行开发,首先引入微信的jar包libammsdk.jar
  3. 开始写代码,首先注册APPID,调起自己家的服务器,让服务器去调用统一下单的API生成预支付订单,获取到prepay_id.

    该方法用于判断手机端是否安装微信,以及微信版本是否支持支付功能。

    该方法就是向自己的服务器发送请求,让它去获取prepay_id,然后返回给app端。
  4. 调起微信客户端:实现PayReq类,封装参数,然后调起微信客户端。此段代码,直接复制自微信的demo,稍加改动。

    注意:服务端调用微信的统一下单的api之后,统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay。
  5. 支付结果回调
    参照微信SDK Sample,在包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。

    • 0 成功 展示成功页面
    • -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
    • -2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。
  6. 微信明确提出,不能以客户端返回的数据为准,必须主动向自己的服务器查询支付结果,然后服务器去向微信的服务器查询订单的支付结果,然后展示在自己的界面上。所以,微信需要自己的应用中有一个展示支付结果的界面,这一点和支付宝不一样,因为支付宝返回的结果直接就可以作为最终的订单结果。
    查询的代码就不贴出来了,有可能是自己将prepay_id传递给服务器,然后服务器去查询,返回过来一堆订单的数据,选择一部分展示到界面上即可。展示样例:

    (自己家的不能给,贴个别人家的,这个是产品和UI做)

Hole坑

在保证流程正确的前提下,给大家介绍几种常见问题
1. 在成功注册了正确的APPID的前提下,如果回调结果返回-1,你的第一反应应该是什么,是签名错误!!!请让服务端核对签名,当然对调其
微信客户端的参数签名应该放在服务端去做,即安全又合理,我们app端仅仅是做了传递参数。但是希望大家都了解这个签名过程,我所接触过的
很多收银的签名算法都是这个过程:排序->拼接key->MD5加密。
2. 由于调其微信支付的时候需要将APPID注册到微信客户端中,并且将订单数据传给微信,所以在未调试成功之前如果返回结果-1,那么下次调试
的时候需要清空微信客户端的数据,这个也很重要。(设置-应用-微信-清空数据)
3. 在调试微信的时候,要求必须使用正式的签名文件keystore,但是我们studio直接运行,使用的是默认的签名文件,所以有两种选择:
每次调试都要生成apk安装;或者在gradle里写下这句话,并将keystore放在app目录下:


比如,如果签名名称为wall.keystore,那么就会到app目录下找这个文件。
一定注意,在上线的时候要删除掉这个签名文件,并且注释掉这段话!

In the end

如果发现问题,欢迎留言或者发邮件到815852777@qq.com,感激不尽。

微信App支付总结(返回-1什么的最e心)相关推荐

  1. JAVA微信APP支付接口整合

    2019独角兽企业重金招聘Python工程师标准>>> 上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它 ...

  2. 第三方支付——微信app支付

    微信App支付 前言 本篇文章将结合自己实际开发经验,从一下几个方面介绍微信app支付,什么是微信app支付?支付流程是什么样的? 前期需要准备些什么?结合官方文档和实际代码带大家走流程. 正文 微信 ...

  3. php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】

    本文实例讲述了PHP实现的微信APP支付功能.分享给大家供大家参考,具体如下: 1.进行支付请求 他给的DEMO 用的时候有时候会报错 1)我遇到的情况 把  WxPay.Api.php这个文件的 p ...

  4. 微信APP支付的坑 - errorcode=-1

    微信APP支付的坑 - errorcode=-1 关于微信App支付errorcode=-1的原因网上的大多数的说明和微信的官方文档差不多,不外乎app签名包名对应问题,这些原因都很好排除. 但最要命 ...

  5. 微信App支付全解析

    简单介绍了微信移动支付的申请.接入.使用.确认支付结果等相关流程 0 系列文章 系列一 微信App支付全解析 系列二 支付宝App支付全解析 系列三 微信公众号支付全解析 系列四 微信扫码支付全解析 ...

  6. 微信app支付服务端开发记录

    微信APP支付服务端 调用接口需要注意事项: 1.签名:需要全部参数参加签名,空值去掉.(实际传递了什么参数需要,就根据实际参数进行签名) 2.签名参数:appid是申请支付功能的app对于的ID,k ...

  7. 微信app支付功能-服务端的实现-python3版

    微信app支付功能-服务端的实现-python3版 一:需求说明 二:微信app支付处理流程 三:所需依赖 3.1 支付配置 四:接口开发 4.1 创建订单接口 4.2 微信异步回调接口 4.3 订单 ...

  8. 微信APP支付之IJpay的使用

    写在开始:一个搬砖程序员的随缘记录 微信支付相对其他支付,比如支付宝支付坑比较多.一直报签名失败.签名参数顺序.数据类型,加密类型这些都需要注意,用第三方的比较省心. IJpay介绍: 聚合支付,IJ ...

  9. java实现微信App支付

    废话不多说,直接上代码,微信的小程序,公众号支付都大差不差,自行看文档修改参数即可. maven依赖: <dependency><groupId>com.github.wxpa ...

最新文章

  1. UI培训教程分享:常用的商业插画风格有哪些?
  2. [二分查找] 二:二分查找的经典例题
  3. html3d样式,CSS+HTML3D文字效果
  4. Redis源码剖析(十)简单动态字符串sds
  5. source insight 解决自动缩进 和 TAB键=4个SPACE
  6. java spring druid_Spring配置Druid连接池
  7. 程序员面试金典 - 面试题 16.17. 连续数列(DP/分治)
  8. 触摸事件touchevent
  9. 推荐一个强大的Go库-rk-boot,未来 Go领域的SpringBoot?
  10. Oracle体系结构一
  11. python导入wx_Python“导入wx”
  12. 美图秀秀修复背光照 瞬间让你光彩照人
  13. 台式机主板常见接口资料
  14. 联想e470加装固态硬盘_联想e470能不能加固态硬盘?
  15. 微信jssdk录音功能开发记录
  16. Azure 媒体服务可将优质内容传输至 Apple TV
  17. OpenCV的区域分割、轮廓检测和阈值处理
  18. 大数据专业就业岗位有哪些?
  19. 景区自定义手绘地图叠加
  20. 静态路由实现两台主机互通

热门文章

  1. 我的新书《Android自定义控件入门与实战》出版啦
  2. 线性代数复习 第二章 矩阵
  3. 神经网络的基本骨架—nn.Module使用
  4. [渝粤教育] 西南科技大学 网络营销 在线考试复习资料
  5. python颜色表_python docx设置表格单元格背景和文本颜色
  6. 你用icloud网页关闭激活锁功能
  7. 微媒云播专做企业级直播间,一体化直播营销方案成为SaaS臻选
  8. Community项目--账户的管理
  9. 基于PaddleHub的AI人脸侦测:不再用手打灰机(附代码)
  10. spring mvc 拦截器拦截jsp页面