微信扫码支付支付问题

微信支付我遇到的那些问题
我的图书馆
微信支付我遇到的那些问题
现在,越来越多公司,选择借微信的势来发展自己的平台,进入工作没多久,我也被告知了要对接微信支付的需求。原本以为这样的对接,跟着文档走,应该没多大的难度的,可是后来,我才发现,原来我太天真了。在此,留下印记,说说我在微信支付上面遇到的那些问题。 & & & &1、关于微信支付 & & &首先说下微信支付。随着微信的红火,微信支付在第三方支付也占了一大块地盘,越来越多的公司在自己的APP或者网站上集成了微信支付。从微信支付的官网https://pay.weixin..com/index.php/home/login?return_url=/&可以看出,微信支付主要分为四大块,公众号支付、APP支付、扫码支付(网站)、刷卡支付。工作上,我接触到了前三种,遇到了各种各样的问题。 & & & &2、关于官方文档 & & &对于开发者来说,对接这种第三方支付,看其官方文档尤其重要。开发者可以通过官网,查到对应不同支付模块的官方文档,但是,请大家注意,该文档有待完善,完全照着文档做,可能实现不了你的功能 & & & &&3、微信支付流程
     微信支付的流程,在微信支付官网上也有所显示,这里更加泛化的说一下,其实微信支付需要的是集成了微信SDK的客户端,客户先通过客户端浏览完成订单,然后后台首先在业务系统生成了订单,订单生成后,业务系统请求微信服务器,进行统一下单。统一下单完成后,微信返回相关信息,后台就可以形成相应的支付二维码或者是封装出可以调起微信支付需要的信息。接下来,用户只要通过扫一扫或者点击确认支付,便可以调出微信支付。支付成功后,微信会给用户发送信息,同时也会对业务系统指定的地址发送对应的回调信息,将支付结果告知微信。同时,微信支付信息也可以通过后台直接请求微信支付来进行确认。 & & & & 4、微信支付相关 & & & & &&首先,微信支付有一个最重要的过程,就是统一下单,简单的说,开发者需要将业务系统中的订单信息发送给微信,让微信后台形成在微信那边的一个支付订单。在向微信请求的时候,传送的数据为xml格式,微信要求xml传送的数据需要进行一次加密,然后将加密的字符串附加在xml中一起传输到服务器端,服务器端验证通过之后才能进行下订单操作。具体的算法说明地址https://pay.weixin..com/wiki/doc/api/jsapi.php?chapter=4_3 & & & & & 以下,是基于java实现的加密算法:
01.1 /**02.2& * 微信支付加密工具,需要加入key03.3& */04.4 public static String signature(Map&String, String& map, String key) {05.5&&& Set&String& keySet = map.keySet();06.6&&& String[] str = new String[map.size()];07.7&&& StringBuilder tmp = new StringBuilder();08.8&&& // 进行字典排序09.9&&& str = keySet.toArray(str);10.10&&& Arrays.sort(str);11.11&&& for (int i = 0; i & str. i++) {12.12&&&&&& String t = str[i] + '=' + map.get(str[i]) + '&';13.13&&&&&& tmp.append(t);14.14&&& }15.15&&& if (StringUtils.isNotBlank(key)) {16.16&&&&&& tmp.append('key=' + key);17.17&&& }18.18&&& String tosend = tmp.toString();19.19&&& MessageDigest md = null;20.20&&& byte[] bytes = null;21.21&&& try {22.2223.23&&&&&& md = MessageDigest.getInstance('MD5');24.24&&&&&& bytes = md.digest(tosend.getBytes('utf-8'));25.25&&& } catch (Exception e) {26.26&&&&&& e.printStackTrace();27.27&&& }28.2829.29&&& String singe = byteToStr(bytes);30.30&&& return singe.toUpperCase();31.3132.32 }
     微信支付第一个问题,数据加密的key。这个坑在于不细心,微信支付有很多key,包括我们微信绑定时候自己输入的key,还有微信给的随机字符key,而这里,在用于加密的key,并不是我们微信公众号中的 AppSecret,而是在微信支付商户后台设置的key,设置的位置为: key设置路径:微信商户平台(pay.)--&账户设置--&API安全--&密钥设置 如果不是使用该Key,哪怕是你的算法写对了,数据传到用户那里,依然返回的是签名错误。 & & &PS:微信官方给出了一个验证签名准确性的工具,该工具地址为https://pay./wiki/tools/signverify/,AnyWay,正如刚才说了,如果key设置的不正确,比如说使用了AppSecret ,那么,你会发现,该工具的出的加密字符串和自己得出的一模一样,然后当你发送给微信服务端的时候,永远返回的是错误。 & &   微信支付第二个问题,post编码问题。当组装好数据后,需要通过POST的形式向微信服务器发送数据。可是,问题来了,微信的数据封装的完全正确,key也设置正确了,在官方的验证工具上验证出来也是正确的,可是,微信总是提示签名错误。这个问题出现在post请求的编码问题上,遇到这个问题的情况是,在封装数据的时候,xml里面加入了中文,然后每次请求就会报错,可是如果中文去掉,下单成功。最后才发现,原来POST的时候,没有设置编码,设置成为UTF8之后就没事了。可是,返回的签名错误,也真心难排查啊 & & &   微信支付第三个问题,js-sdk调起支付控件。这一步时讲在微信里面H5调起支付控件的。需要注意的是要在H5上面调出支付控件,第一件事需要在微信公众要后台添加指定域名允许该域名调起控件,否则,是不能调起的。设置的教程在这:https://pay./wiki/doc/api/jsapi.php?chapter=7_3&。 &&&&&设置完成之后,接下来是通过js调起,在此吐槽一下,我第一次做的时候,是直接copy的官方的js下来改的,可是。。。。。。。官方的JS上面全角半角的字符混合,导致的别说是他的JS了,就是我自己写的JS最后都没调出来。。。。。然后,关于提示,,苹果版还好,安卓版的微信,如果调不出控件,它一点反应都不会有的。。相对而言,苹果版会有一个弹框提示,所以后期,只要出现问题,都先用苹果测测看看出了什么错。 & & &   微信支付第四个问题,app端数据封装。能够统一下单了,这样一来就是对数据封装返回给前端了,这一部,还是需要进行签名,按理来说,前面和前面采用的是同样的方法,应该问题不大才对。确实,在web端和扫码支付都没多大问题,可是,app端问题来了。我在公司刚开始和安卓的同事调这个的时候,本来以为一个下午能搞定了。可是,却不如我们所想。我们全部采用的是官方给的要求进行封装的数据,我后台统一下单完成之后,给到安卓,结果安卓死活调不出支付控件,而且一直都返回-1的结果,该结果,可以说一点用处都没有。安卓端的同时调了好久,一直没有找到解决方案,值得一说的是,它官方给的Demo是可以调出结果界面,可是也是调不出支付控件的。而且,他的java文件,utf-8和GBK两种编码混在一起的。最后说一下,为啥app调不出支付控件。 &
01.1 //网页调起的时候02.2 String time = Long.toString(System.currentTimeMillis());03.3 back.put('appId', mchappid);04.4 back.put('timeStamp', time);05.5 back.put('nonceStr', '5K8264ILTKCH16CQ2502SI8ZNMTM67VS');06.6 back.put('package', 'prepay_id=' + order.getPrepay_id());07.7 back.put('signType', 'MD5');08.8 String sign2 = SignatureUtils.signature(back, wx_key);09.910.10 JSONObject jsonObject = new JSONObject();11.11 jsonObject.put('appId', mchappid);12.12 jsonObject.put('timeStamp', time);13.13 jsonObject.put('nonceStr', '5K8264ILTKCH16CQ2502SI8ZNMTM67VS');14.14 jsonObject.put('package', 'prepay_id=' + order.getPrepay_id());15.15 jsonObject.put('signType', 'MD5');16.16 jsonObject.put('paySign', sign2);17.1718.18 result.put('status', 'success');19.19 result.put('msg', '下单成功');20.20 result.put('obj', jsonObject);21.21 return
01.1 //APP调起的时候,请注意,安卓端不能用驼峰法,所有的key必须使用小写02.2 String time = Long.toString(System.currentTimeMillis());03.3 back.put('appid', app_mchappid);04.4 back.put('timestamp', time);05.5 back.put('partnerid', app_mchid);06.6 back.put('noncestr', '5K8264ILTKCH16CQ2502SI8ZNMTM67VS');07.7 back.put('prepayid', order.getPrepay_id());08.8 back.put('package', 'Sign=WXPay');09.9 String sign2 = SignatureUtils.signature(back, wx_key);10.1011.11 JSONObject jsonObject = new JSONObject();12.12 jsonObject.put('appid', app_mchappid);13.13 jsonObject.put('timestamp', time);14.14 jsonObject.put('partnerid', app_mchid);15.15 jsonObject.put('noncestr', '5K8264ILTKCH16CQ2502SI8ZNMTM67VS');16.16 jsonObject.put('prepayid', order.getPrepay_id());17.17 //jsonObject.put('package', 'Sign=WXPay');18.18 jsonObject.put('sign', sign2);19.19 result.put('status', 'success');20.20 result.put('msg', '下单成功');21.21 result.put('obj', jsonObject);22.22 return
如图,图1为微信官方文档中安卓调起支付控件的示例代码,接下来为web端调起支付控件时候进行加密的算法,最后为解决问题后返回给APP数据时候数据封装的代码。问题所在就是在于,它数据的封装不像官网所说的使用驼峰法,app的时候,需要把所有的字符小写,,,小写,,,,,,,。还有,官方说的packageValue是错的,要用package,就是因为这些错,加密出来的数据是错的,所以app端才调不出支付控件。在此,为我那个调到奔溃的同事默哀。
  至今为止遇到的问题大致如上,做下笔记,同时希望对同为开发的朋友有用   最后,附上本人在github上的一个基于java的微信支付后台Demo&/Seanid/wechatPay & &
馆藏&23945
TA的最新馆藏[转]&[转]&[转]&
喜欢该文的人也喜欢联想社区APP
ZUK Z2 Pro
总帖数: 9057
今日发帖: 12
关注数: 2114
版主: &nbsp&nbsp&nbsp
在线时间0 小时
微信支付问题
发表于 昨天&17:57
好像更了3.1之后,微信指纹支付就不能用了,关掉指纹识别重新设置,一直提示识别失败,支付宝就没有这样,有人知道是啥原因吗?
(1 MB, 下载次数: 0)
昨天&17:57 上传
在线时间491 小时
发表于 昨天&18:24
试试重新录入指纹
扫码下载联想社区APP关于微信支付调用的一些问题(微信支付是个坑)_虞建辉_新浪博客
关于微信支付调用的一些问题(微信支付是个坑)
最近手上的项目需要对接微信支付,所以就开始微信支付接口的调用,其中遇到很多个问题,和一些问题自己的处理方法。
先说问题:
1,微信移动支付的申请
微信支付的申请需要在微信开放平台上进行,不支持个人申请,开通微信支付需要审核费300元。不过这些对于我们开发者来说,不是我们的问题。
2,​微信支付的demo用不了
这是个大问题,的确微信的demo不能用,确切说不能单独用。说一下我是怎么解决这个问题的,我把微信支付demo里的类直接放到我们自己的工程中,进行测试,其中把APP_ID,​MCH_ID,API_KEY
换成我们自己的,API_KEY是自己与后端服务器定义的,自己定义的。微信支付的例子中有一个测试订单,我们把上面的key值设置好后,再去调用试试。
3,可以调用但是返回-1
返回-1的情况有很多,如果你是用微信demo里的测试订单,那么订单是没用问题的。问题一般出现在下面几个问题:
1)项目要打包生成apk,不能直接在线上进行debug调试。
2)看看自己的那些key值对了没有。
3)签名不同,看看开放平台上申请的应用包名和签名与我们的项目签名和包名是否一致。​
4,​没有回调界面
这个原因是回调函数有个不成文的规定,就是这个函数的包名的命名是自己的应用包名+​wxapi,然后把他的回调函数放进去。这样子基本上就没有问题了。
5,还有一个最大的问题,我也没有解决
就是上面都没错的时候,还是调用不成功,我们只要把微信的数据清空,然后在调用
就可以了。我也不知道这个问题是什么,如果谁有知道这个问题的解决方案的话麻烦告知一下。也可加qq
一起研究,qq。下篇文章我会把支付宝支付的给写上。
博客等级:
博客积分:0
博客访问:1,609
关注人气:0
荣誉徽章:微信支付在生活中的使用及其信用问题_无忧支付网
囊括国内所有第三方支付公司信息
为客户提供最优质的支付接口服务
24小时服务电话
您当前的位置: >
微信支付在生活中的使用及其信用问题
添加时间: 21:46
  近几年智能手机的发展使原本在电脑端业务转到了移动终端,移动支付已逐渐成为网络支付的主流方式。微信支付是最新及最具潜力的移动支付方式之一,自2013年8月份推出之后,依靠着移动互联网最大的流量入口之一的微信平台迅速发展,用户的增长速度及成交额的增长速度已经远远超过了同行业其他的竞争者,在支付过程中安全问题和信用问题也随之成为了广大用户关注的焦点。
  1、微信支付在生活中的使用现状。
  1.1、微信支付的应用现状。
  微信用户在2013年底已经突破了6亿,越来越多的企业在微信中创建了公众账号,利用公众账号为用户提供资讯、服务、商品,更多电子商务企业进入微信平台,腾讯趁势推出微信支付来满足企业和消费者在微信平台内交易的支付需求。微信支付除了可以满足消费者在微信平台上的支付需求,还可以满足用户在其他平台的支付需求。微信支付推出之后已经有不少电子商务企业接入了微信支付,如易迅网、当当网等电子商务大企业都相继接入微信支付,微信支付的支付领域也越来越广泛。
  1.2、微信支付的支付方式。
  微信支付推出之后主要有三种支付方式分别是公众账号支付、扫二维码支付、App支付。
  公众账号支付:用户在微信中关注商家的公众账号,在商家的公众号总选择自己喜爱的商品,提交订单,在商家的公众账号内完成支付,如关注小米手机的公众账号就能在购买小米手机。
  扫二维码支付:扫二维码支付分为线下扫码支付和线上扫码支付,线下扫码支付是指用户在线下选中某些商品之后,会有生成一个支付的二维码,用户只需要在扫描二维码,在手机终端确认支付,就可以完成整个支付的过程,如上品折扣百货。线上扫码支付是指接入微信支付的上商家在支付时,在PC端上生成一个二维码,用户只需要扫描PC端的二维码跳转至微信支付的交易页面,完成交易流程。扫二维码支付方式的出现大大简化了移动支付的操作,但同时也遭到了央行对其安全性提出质疑,并且勒令所有支付平台暂时停止使用二维码支付。
  App支付:App支付即第三方应用商城支付,电商平台只需接入微信支付,用户在其平台进行网络交易可以调用微信支付来完成交易,用户在第三方应用中选择商品和服务,选择微信支付完成支付的过程。
  2、微信支付的信用分析。
  2.1、微信支付的信用现状分析。
  2013年8月,微信支付自正式推出之后发展迅速,安全问题和信用问题一直被用户和同行所质疑,2013年10月艾媒咨询对手机网民进行调查,调查手机用户对于微信支付的看法,52.9%用户认为微信支付具有前景,但是仅有5.8%用户表示很看好。据数据分析显示,仍有四成手机网民对微信支付的前景存在保守观望态度,其中原因就便是微信支付缺乏一个完善的信用体系,无法取得网民的信任。从侧面也反映出微信支付在人们心中的信用状况,有一半以上的手机网民对微信支付的存有观望的态度,这部分人在生活中不会过多排斥微信支付,但是也不会主动使用微信支付或者很少使用微信支付,一般用微信支付的时候都非常谨慎,金额也相对较小,只有不到百分之二十的人是完全信任微信支付,也就是说在众多手机网民之中只有不到百分之二十的用户会成为微信支付的忠实用户,这对微信支付的长期发展非常不利,如何让用户将微信支付与日常生活联系在一起,让用户充分信任微信支付能保障账户中资金的安全是微信支付当前面对的主要问题。
  2.2、微信支付信用问题的原因分析。
  2.2.1、微信账号的安全隐患。
  微信平台是目前移动互联网最大的流量入口之一,在移动互联网的市场上具有巨大的优势,但同时也会出现自己的风险,微信是一个开放的社交平台,用户可以在向好友自由分享链接,一旦账号被盗,除了账号本身绑定的银行卡资金的安全会受到威胁,还会可以向其好友传播诈骗链接对好友的安全也是一种威胁,如果验证分享链接的危险性,这些安全隐患都在直接或者间接的影响着微信支付在用户心中的信用度,如何解决或减少这些安全隐患对微信支付的信用影响将是微信支付未来几年要解决的主要问题。
  2.2.2、网络的虚拟特点。
  在网络诈骗层出不穷的今天,用户对网络有着安全隐忧,微信支付在移动支付领域具有很大特殊性,它是在社交网络的基础上推出,在大部分用户的心中,社交网络充满着欺骗性,当它涉及金钱的时候这种感觉将会更加强烈,这都是源于网络的虚拟性,用户无法肯定对方是否真实存在还是虚构出来的,这些成为所有涉及网络支付不可回避的问题,解决这些问题不是一朝一夕的事,这是老百姓的观念,不能轻易改变的,需要长时间的积累才能让用户真正的信任。
  2.2.3、缺乏相应的信用体系。
  微信支付作为第三方的支付平台缺少一个信用评价体系,这并不是微信支付所存在的问题,在我国内,信用机制发展较晚,国民在这方面意识也不强烈,也导致了国民对信用的不重视,这对于建立在虚拟网络的电子支付就更加明显,在交易的过程中即使存在第三方担保交易,我们也不能完全放心,都是信用体系缺失的体现,国内信用体制在未来几年都将保持现状,在国内信用体制构建完成之前,这一现状将不会又太大的变化。
  2.2.4、相关法律制度的不完善。
  微信支付是终究还是属于电子支付,而在我国关于电子支付的法律并不成熟,当前我国仅有一部涉及电子金融行业的《电子签名法》在维系互联网及移动支付领域的信息安全与金融安全。这个情况导致一旦消费者因电子交易而出现的钱财纠纷都难以解决,缺乏统一规范的电子支付法律法规,及相关法律法规执行不力等原因,也将致使移动支付消费者的合法权益难以得到有效维护。在移动支付过程中,消费者遭遇的支付障碍或金融诈骗常因为立案难、取证难、诉讼难等若干司法与执法环节的缺失也会导致消费者对于电子支付的谨慎使用,这对电子支付的发展不利,对微信支付的发展更不利。微信支付拥有央行发布的基金支付牌照,背后又有腾讯公司的技术、资金的支持,但是微信支付是由民营企业创建,在信用方面远不如国家支持的银行及电子支付经验更加丰富的企业。
  3、关于解决微信支付的信用问题的对策和建议。
  3.1、构建信用评价系统。
  微信支付是一个网络支付工具,网络支付工具的目的就是让交易双方能够放心交易。目前的网络消费因缺乏可靠的信用体制消费者只有信任微信支付,才会使用微信支付,只有让用户相信在支付之后不会造成损失,构建一个可靠地信用评价体系是让用户放心使用微信支付。对开放支付接口的企业或者个人需要有严格客观的信用评价,评价系统要客观、公平、公开,通过信息的收集、分析、评估对开放支付接口的企业或者个人给出客观的评价。针对6亿的微信用户进行数据整合,构建一个庞大的用户信用数据库,对开通微信支付的账户进行重点监测,根据用户的资金交易记录、用户等级、用户操作习惯对用户进行一个简单的分类和评价,并且可以受理账户之前的投诉,对哪些有非正常交易和诈骗行为的微信账号进行严肃处理。
  3.2、快速响应用户的投诉。
  国内大部分金融机构在处理用户损失的问题,处理周期都拖得相当长,针对用户的反映也不够及时,在网络支付的处理上也是如此,对于用户在使用支付的过程中造成资金损失的投诉需要第一时间给予用户回复,让用户感觉跟微信支付关联的资金受到了足够的重视和保护,可以专门开设一个处理用户资金问题的微信公众账号,为用户在受到损失的时候能够最快的找到有效途径,不至于造成不同部门之间的推脱,影响用户对微信支付的信心,这些对提升微信支付在用户心中的信用度有很大的帮助。
  3.3、提升安全技术,增加用户信任感。
  根据最新腾讯安全报告中指出,2013年手机病毒较2012年多了4.7倍,手机病毒和木马程度都让绑定微信支付的银行卡暴露在危险之中,手机系统的安全机制并不完善,技术也不成熟,很多系统漏洞都可以被轻易的发现和攻破,这些都让用户在操作的时候产生疑虑。加强对最新的安全认证技术的应用,如人脸识别技术和指纹识别技术,利用唯一的生物特征完成对身份完成认证,人脸识别技术针对人脸进行数据采集,经图像算法分析得出一个相似值,从这个相似值来判断是否是一个人。指纹识别技术受限于硬件设备,目前除了苹果和三星的部分机型支持指纹的读取,大部分手机都没有装有指纹传感器,不能完成指纹数据的采集。
  3.4、提高安全意识,构建安全环境。
  移动终端的网络环境一直不及电脑端成熟,一来用户对手机端的安全意识并不强烈,认为只要手机在手上就是安全的,这是错误的意识。用户在安全手机应用程序时,黑客可以轻易盗取手机中的信息和密码,在安装手机软件时应尽量安全官方版,对不熟悉的应用或者疑似恶意软件,都不要轻易安全,以免破坏手机安全系统。二来是移动终端的安全技术也并不成熟,很多技术都存在漏洞,这需要用户在使用微信支付注意防范,定期修改支付密码,不要把与支付密码相关的信息储存在手机中,提升自我的安全意识。
  4、总结。
  微信支付是移动支付的新型模式,它的发展势必会引起移动支付的市场变化,改变移动支付的支付模式,从而提升用户对移动支付的要求。
  微信支付的应用场景将会不断的丰富,接入商家越多,对微信支付如何解决信用问题也会更加急切。微信支付起步的时间不长,但是起点很高,这将导致微信支付缺乏处理问题的经验,微信支付是新生态的支付方式,在不断发展的情况下,将会出现许多不可预测的新问题,需要微信支付及时应对。}

我要回帖

更多关于 微信扫商家二维码支付 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信