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

来源:互联网 发布:郑州淘宝加盟宣判了吗 编辑:程序博客网 时间:2024/04/30 16:14

        我承接app微信公众号开发,如果有谁需要的话,可以惠顾我,谢谢.

QQ: 40678884

微信: szuzsq

主页: http://www.wxshaker.com

博客: http://blog.csdn.net/szuzsq

-------------------------------------------------------------------------------------------------------------------------------------



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



扫码支付,只需将特定的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处理方式了呢?也许是因为考滤,刷卡支付可以实现在硬件上吧,例如,扫码枪.可以省掉一个服务器,如果店家只把刷卡硬件当收费工具,而不需要对这些账单折腾到服务器上时.

0 0