说明:这里只涉及到微信支付和淘宝支付

以官网的接口为准,主要关注【网关】、【接口】、【参数】【加密方式】【签名】【回调】

第一步,了解自己的项目要集成的支付方式

常见的有扫码支付、网页支付、APP支付。

第二步,了解支付商(微信/支付宝)的支付接口

微信和支付宝的接口所需要的参数内容大致是一样的,不同的在于参数名,签名方式不一样

其中扫码支付和网页支付的接口是同一个,因为网页支付是可以通过APP扫码支付和登录支付账号进行支付的;而APP支付的接口是另一个

微信支付开发流程:

关键的配置参数有:【支付网关】、【appid】、【私钥】、【签名方式】、【回调地址】、【商户号】、【签名】

支付参数有:【订单号】、【订单金额】、【订单描述】

微信的签名方式目前规定使用的是MD5;

回调地址:POST请求方式,必须是公网可访问(可以是IP也可以是域名),不能带任何参数、回调的参数要以流的方式进行接收,且为XML格式;

私钥:用于签名,签名的目的就是加密数据,防止交易数据被篡改。

流程

  1. 打包参数(根据统一下单接口的要求提供必需参数)

所有参数以key=value方式存在,各参数之间&方式连接,最后用私钥进行MD5加密,然后将得到的签名以sgin为key放入到参数的最后面,并转为XML格式字符串。

  1. 统一下单

(1) 这一步最主要的用途就是得到支付接口所需要的prepay_id

(2) 以POST方式发送http请求,所有参数要转为XML格式串

  1. 打包参数(根据支付接口的要求提供必需参数)

所有参数以key=value方式存在,各参数之间&方式连接,最后用私钥进行MD5加密,然后将得到的签名以sgin为key放入到参数的最后面。

  1. 调用支付接口

支付宝支付开发流程:

  1. 支付宝比微信要简单些,因为支付宝对签名进行了封装,只需要把参数打包,调用方式就进行了签名等必要操作(微信支付也可以按此方式自己进行封装),返回的串可以直接给支付接口。
  2. 封装的接口有sdkExecute和pageExecute,当支付方式为APP时,调用sdkExecute,当为NATIVE时调用pageExecute
  3. 签名:使用RSA2

开发时遇到的问题(微信的要仔细些,坑多)

  1. 因参数名不对,导致失败

微信的一个坑:微信的统一下单与支付接口,某些参数名不一样,而实际表示的内容是一样的。

比如商户号:统一下单中是mch_id,而支付接口中是partnerid

  1. 因签名加密方式不对,导致失败

微信的一个坑:微信提供的demo中,如果不是沙箱环境,就使用HMACSHA256的加密方式进行签名,而实际生产环境中是要使用MD5的,且两次加密的方式必需一致。MD5加密后的串是32位,HMACSHA256加密后的串是64位,可以通过这个差别来判断出前后签名使用的加密方式是否一致。

  1. 回调处理业务逻辑

回调时要做的几件事:

  1. 验证签名
  2. 签名验证通过后,再进行订单号,商户号,订单金额,appid的一致性验证

参数名不一样:因为我开始是将微信和支付宝的回调处理业务逻辑放在一起的,而微信和支付宝返回的参数名是不一样的,所以最好还是分开处理

订单金额单位不一样:微信是分,支付宝是元。所以在处理时,我统一将单位换算为分,那么在接收订单金额时,支付宝返回的就有可能是带小数点的,在处理时就用到了Double去处理,Double处理后的数据是带了小数点,我当时在做订单金额比较时,先用Integer对数据进行转换后再相减,Integer对带了小数点的数字是转换不了的(而且当时后台程序也没报错),所以这里要注意,后面我统一使用的是Double

微信支付与支付宝支付java开发注意事项的更多相关文章

  1. APIcloud制作APP 微信支付与支付宝支付

    首先要在云端绑定相应模块如alipay和wxpay其次编写代码. 配置区域 var cfg = { webName:'',//APP名字 payDebug:true, isUseWxPay:true, ...

  2. apicloud含有微信支付。支付宝支付和苹果内购的代码

    apicloud含有微信支付.支付宝支付和苹果内购的代码 <!DOCTYPE html> <html> <head> <meta charset=" ...

  3. 微信支付、支付宝支付和QQ钱包支付

    最近忙于对接微信支付和支付宝支付,注册微信公众号,认证公众号,注册微信支付商户号并进行认证: 签约支付宝支付产品(手机网站支付.PC网站支付),注册支付宝企业账号(企业账号权限更大): 注册QQ钱包商 ...

  4. PHP后台支付的开发:微信支付和支付宝支付

    关于支付的流程之类的就不做解释,大家可以自行搜索! 微信支付 项目前提:本人用的是tp框架,PHP语言下载到微信平台提供的微信支付接口文件,放在了tp第三方类库vendor,命名为WxpayAPI, ...

  5. iOS----支付(微信支付、支付宝支付、银联支付控件集成支付)(转)

    资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一. ...

  6. H5中的微信支付、支付宝支付

    微信支付的申请: 公众号支付.扫码支付等在微信公众平台.移动端的申请在微信开放平台 公众号支付流程:申请微信公众号(服务号并完成微信认证)——申请微信支付商户号(申请微信支付,资料审核通过以后,请前往 ...

  7. 转《基于Ionic3实现微信支付和支付宝支付》

    在Ionic应用里实现支付并不难,但是有的坑真是不爬不知道. 一:支付宝支付 网上关于支付宝支付cordova插件真是非常多,但是大多会报一些让你很无语的错误.比如sdk早已过时不是最新的,或者没有出 ...

  8. 前端:微信支付和支付宝支付在pc端和h5页面中的应用

    1:h5微信支付 使用的是https://pay.weixin.qq.com/wiki/doc/api/index.html  中的 (1):公司需要首先要配置公众号微信支付地址和测试白名单(支付的时 ...

  9. Mui 微信支付、支付宝支付

    利用mui 发起手机微信和支付宝支付 payStatement :调起微信支付接口的参数 参考文档: https://pay.weixin.qq.com/wiki/doc/api/app/app.ph ...

随机推荐

  1. @codeforces - 141E@ Clearing Up

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 N 个点 M 条边的图,每条为黑色或者白色. 现在让你 ...

  2. Android Service Summary

     In the Androird, service is a none-UI background process that is doing some specific jobs.   6.1 Ex ...

  3. Jmeter If控制器

    "${xxx}"=="1" 或者 "${xxx}"!="2"

  4. docfx 做一个和微软一样的文档平台

    开发中,有一句话叫 最不喜欢的是写文档,最不喜欢的是看别人家代码没有文档.那么世界上文档写最 la 好 ji 的就是微软了,那么微软的api文档是如何做的?难道请了很多人去写文档? 实际上微软有工具用 ...

  5. oracle函数 LTRIM(c1,[,c2])

    [功能]删除左边出现的字符串 [参数]C1 字符串 c2 追加字符串,默认为空格 [返回]字符型 [示例] SQL> select LTRIM('   gao qian jing',' ') t ...

  6. SDUT-2122_数据结构实验之链表七:单链表中重复元素的删除

    数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 按照数据输入的相反顺序(逆 ...

  7. [\s\S]*?懒惰模式特殊情形

    通常理解[\s\S]*?X (X代表任意指定字符) 表示匹配任何字符的懒惰模式,一旦遇到后面出现的X便停止匹配,但实际不是如此,会尽可能的把后面的内容也匹配进去.如: 表达式 <tr[\s\S] ...

  8. 使用jquery.form.js的ajaxsubmit方法提交数据的Bug

    周五同事遇到一个很奇怪的问题,调到下班,虽然问题解决了,但是不知道问题的具体原因,回来翻了翻代码,才发现症结所在,下面就分享出来,供遇到同样问题的同行们参考: 先把问题描述一下,做的功能是使用ajax ...

  9. vue-router在新窗口打开页面

    1. <router-link>标签实现新窗口打开: <router-link target="_blank" :to="{path:'/app/dat ...

  10. phpstorm 有的单词下有下划线,怎么去掉?

    settings -> Editor -> Colors & Fonts -> General ->Errors and Warnings然后你会看见下面的示例代码.点 ...