最近有个微商城做了微信支付的接口,现在整理一下发上来。
首先是需要有已开通微信支付接口的公众号,这个相信大家都知道,开通之后微信会发一封邮件到你的邮箱,邮件的内容就是开发需要用到的一些接口信息了(包含账号密码之类的东西)。
开发步骤
一、进入公众号平台,先设置几个参数,包括绑定域名、设置回调地址等等。
1、在设置 -> 公众号设置 -> 功能设置 -> 设置JS接口安全域名
2、在微信支付 -> 开发配置 -> 配置你的js支付接口,回调地址等等,正式目录和测试目录都可以写上,测试目录需要把个人微信号先添加到白名单才能使用(提醒:用TP框架的小伙伴们在填写支付授权目录时可以这样填写:域名/index.php/控制器/,经测试是可以通过的,微信一样能检测到,之前看到网上有人说这样不行,可能是现在升级了吧,呵呵,还有一个就是域名一定要是已经备过案的才行,如果是在本地进行测试的小伙伴们可以使用花生壳,我不是在打广告,个人觉得还是挺好用的)
3、在开发者中心把“网页授权获取用户基本信息”的域名写上自己的域名,微信登陆时需要用到的;
二、到上面一大步设置完成后就可以开始我们的开发工作了;
1、用TP的小伙伴们可以用下面的包放到tp的扩展里,也可以自行到官网下载sdk包,具体目录:ThinkPHP\Library\Vendor\,其它就可以不用管啦;
2、打开包里的WxPayPubConfig.php文件,填写上你的微信支付的接口信息就好啦;
三、上面二大步都是配置,这一步就是写支付类了,其实也没什么的,复制粘贴就好了;
1、新建Wxpay控制器,当然你也可以自己命名,访问的名称要跟你在微信上配置的授权目录一样就好了;点击这里下载Wxpay
2、代码的地方就不多说了,下面直接上代码;
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
|
<?php namespace Home\Controller; use Think\Controller; class WxpayController extends Controller { public function js_api_call() { $order_sn = I( 'get.order_sn' , '' ); if ( empty ( $order_sn )) { header( 'location:' .__ROOT__. '/' ); } vendor( 'Weixinpay.WxPayPubHelper' ); $jsApi = new \JsApi_pub(); if (!isset( $_GET [ 'code' ])){ $url = $jsApi ->createOauthUrlForCode( '域名/Wxpay/js_api_call?order_sn=' . $order_sn ); Header( "Location: $url" ); } else { $code = $_GET [ 'code' ]; $jsApi ->setCode( $code ); $openid = $jsApi ->getOpenId(); } $res = array ( 'order_sn' => '20150109113322' , 'order_amount' => 255 ); $unifiedOrder = new \UnifiedOrder_pub(); $total_fee = $res [ 'order_amount' ]*100; $body = "订单支付{$res['order_sn']}" ; $unifiedOrder ->setParameter( "openid" , "$openid" ); $unifiedOrder ->setParameter( "body" , $body ); $out_trade_no = $res [ 'order_sn' ]; $unifiedOrder ->setParameter( "out_trade_no" , $out_trade_no ); $unifiedOrder ->setParameter( "total_fee" , $total_fee ); $unifiedOrder ->setParameter( "notify_url" , \WxPayConf_pub::NOTIFY_URL); $unifiedOrder ->setParameter( "trade_type" , "JSAPI" ); $prepay_id = $unifiedOrder ->getPrepayId(); $jsApi ->setPrepayId( $prepay_id ); $jsApiParameters = $jsApi ->getParameters(); $wxconf = json_decode( $jsApiParameters , true); if ( $wxconf [ 'package' ] == 'prepay_id=' ) { $this ->error( '当前订单存在异常,不能使用支付' ); } $this ->assign( 'res' , $res ); $this ->assign( 'jsApiParameters' , $jsApiParameters ); $this ->display( 'jsapi' ); } public function notify_url() { vendor( 'Weixinpay.WxPayPubHelper' ); $notify = new \Notify_pub(); $xml = $GLOBALS [ 'HTTP_RAW_POST_DATA' ]; $notify ->saveData( $xml ); if ( $notify ->checkSign() == FALSE){ $notify ->setReturnParameter( "return_code" , "FAIL" ); $notify ->setReturnParameter( "return_msg" , "签名失败" ); } else { $notify ->setReturnParameter( "return_code" , "SUCCESS" ); } $returnXml = $notify ->returnXml(); $parameter = $notify ->xmlToArray( $xml ); if ( $notify ->checkSign() == TRUE){ if ( $notify ->data[ "return_code" ] == "FAIL" ) { echo 'error' ; } else if ( $notify ->data[ "result_code" ] == "FAIL" ){ echo 'error' ; } else { if ( $this ->process( $parameter )) { echo 'success' ; } else { echo 'error' ; } } } } private function process( $parameter ) { return true; } } ?> |
四、以上就是微信支付的整个流程了,扫码支付的应该都差不多,我没去弄了,用过的朋友也可以分享下,^_^;来上几张支付的截图