最近作一个微信支付,没时间记录,先写个框架在这里,之后再补充html
微信支付的订单号只可以提交一次。
安全
微信支付须要的四个基本参数微信
appid是微信公众帐号或开放平台APP的惟一标识,在公众平台申请公众帐号或者在开放平台申请APP帐号后,微信会自动分配对应的appid,用于标识该应用。可在微信公众平台-->开发者中心查看,商户的微信支付审核经过邮件中也会包含该字段值。网络
mch_id是商户申请微信支付后,由微信支付分配的商户收款帐号。app
key交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播。商户妥善保管该Key,切勿在网络中传输,不能在其余客户端中存储,保证 key不会被泄漏。商户可根据邮件提示登陆微信商户平台进行设置。也可按一下路径设置:微信商户平台(pay.weixin.qq.com)--> 帐户设置-->API安全-->密钥设置 ,这个以前的版本中也有,只是改了名字,给微信的客服问,他们也说不出个三七二十来。
微信公众平台
AppSecret是APPID对应的接口密码,用于获取接口调用凭证access_token时使用。在微信支付中,先经过OAuth2.0接口获取用户openid,此openid用于微信内网页支付模式下单接口使用。在开发模式中获取AppSecret(成为开发者且账号没有异常状态)。 这个是本身定义的二十多个字符。框架
总之,若是这四个参数不加上,微信支付就不能支付。
异步
异步回调通知
测试
统一下单的时候,要接收微信的通知,刚开始觉得是接收到微信的通知的时候用户支付的界面才能跳转到成功页面,其实这样的理解不对,应该是后台处理的,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,若是没有处理过再进行处理,若是处理过直接返回结果成功。微信支付
微信给发送的xml格式为
<xml> <appid><![CDATA[wx2421b1c4370ec43b]]></appid> <attach><![CDATA[支付测试]]></attach> <bank_type><![CDATA[CFT]]></bank_type> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[10000100]]></mch_id> <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str> <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid> <out_trade_no><![CDATA[1409811653]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign> <sub_mch_id><![CDATA[10000100]]></sub_mch_id> <time_end><![CDATA[20140903131540]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id> </xml>
这时咱们只要给微信返回个
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>
便可
第一个参数必填的,第二个参数是选填的
微信支付退款