微信支付开发教程JAVA编[006]-刷卡支付

        好了,终于要进行正题了.我们来进行实现的支付动作.刷卡支付,即用户打开微信->我->钱包->刷卡.会显示如下界面.商家使用扫描设备读取条形码或二维码,其实就是读取最顶上的那一串字符串.这个界面,每分钟自动刷新新的字符串.如图:

 

扫码支付,只需将特定的xml消息,post到微信服务器: https://api.mch.weixin.qq.com/pay/micropay..如下:

 

<xml>
	<sign><![CDATA[E283A17BFFDE291CB86945B9534E3F0C]]></sign>
	<body><![CDATA[微微花语-花束]]></body>
	<mch_id>1391091002</mch_id>
	<spbill_create_ip><![CDATA[127.0.0.1]]></spbill_create_ip>
	<total_fee>10</total_fee>
	<auth_code>130511591103617845</auth_code>
	<appid><![CDATA[wxfedef3857580f5a0]]></appid>
	<out_trade_no><![CDATA[h80j32aw0zsvw256tfsjj4jmfyd6xrbh]]></out_trade_no>
	<nonce_str><![CDATA[86qlwk7iyq5egk4la2pahuwuglvgz2b0]]></nonce_str>
</xml>

sign字段即为签名字段,签名算法见官方文档:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_3

 

其他字段,见官方文档...

调用这个api会返回xml消息.例如:

 

<xml>
	<return_code><![CDATA[SUCCESS]]></return_code>
	<return_msg><![CDATA[OK]]></return_msg>
	<appid><![CDATA[wxfedef3857580f5a0]]></appid>
	<mch_id><![CDATA[1391091002]]></mch_id>
	<nonce_str><![CDATA[86qlwk7iyq5egk4la2pahuwuglvgz2b0]]></nonce_str>
	<sign><![CDATA[0DA97530CE3C7F5AD0F501042AD5D695]]></sign>
	<result_code><![CDATA[SUCCESS]]></result_code>
	<openid><![CDATA[oeXrjw-JM3GPjBRTPKUM8DOTAQ5A]]></openid>
	<is_subscribe><![CDATA[Y]]></is_subscribe>
	<trade_type><![CDATA[MICROPAY]]></trade_type>
	<bank_type><![CDATA[CMB_DEBIT]]></bank_type>
	<total_fee>10</total_fee>
	<fee_type><![CDATA[CNY]]></fee_type>
	<transaction_id><![CDATA[4005682001201703224272564945]]></transaction_id>
	<out_trade_no><![CDATA[h80j32aw0zsvw256tfsjj4jmfyd6xrbh]]></out_trade_no>
	<attach></attach>
	<time_end><![CDATA[20170322182020]]></time_end>
	<cash_fee>10</cash_fee>
	<cash_fee_type><![CDATA[CNY]]></cash_fee_type>
</xml>

 

 

        需要注意的是,这个api是即时返回的,而当用户当天多次(多于5笔)刷卡之后,微信要求用户输入密码.但是,这个api却是马上返回如下xml的:

 

<xml>
	<return_code><![CDATA[SUCCESS]]></return_code>
	<return_msg><![CDATA[OK]]></return_msg>
	<appid><![CDATA[wxfedef3857580f5a0]]></appid>
	<mch_id><![CDATA[1391091002]]></mch_id>
	<nonce_str><![CDATA[AwIezlvfb055LwLO]]></nonce_str>
	<sign><![CDATA[EB43AF0272D48978F9DF681E935BD347]]></sign>
	<result_code><![CDATA[FAIL]]></result_code>
	<err_code><![CDATA[USERPAYING]]></err_code>
	<err_code_des><![CDATA[需要用户输入支付密码]]></err_code_des>
</xml>

        

 

        这个困扰了我蛮久,不知道微信在大神是如何考滤的,还想着是不是因为http协议的原因,不能让请求卡在那里,一直等一直等,而不返回.后面想想,确实是有道理的,万一用户不输入密码了呢?难道死等下去?

        所以api的返回值,并不是正确的,官方文档里也说明,需要商户去轮询调用查询订单接口,获得真正的结果.但是,像扫码支付,公众号支付,都是可以配置notify_url的,微信会向这个url回调支付结果,一开始我也在想,为什么刷卡支付就不使用这种notify_url处理方式了呢?也许是因为考滤,刷卡支付可以实现在硬件上吧,例如,扫码枪.可以省掉一个服务器,如果店家只把刷卡硬件当收费工具,而不需要对这些账单折腾到服务器上时.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值