php开发之微信支付(扫码支付)

之前有个项目要做微信支付功能,开发过程硬是踩了不少坑,现在将其记录下来方便自己查询也方便在微信支付开发中遇到问题的童鞋参考。

首先是到微信文档那里下载api,还有商家配置、生成订单这些我就不说了。下面直接说微信支付。
微信支付先是要统一下单,先贴码

//构建微信统一订单
    function construct_wxorder($attach, $fee, $power)
    {
        global $smarty, $config, $db, $index_url, $site_config, $wap_url, $host_url, $admin_url;
        ini_set('date.timezone', 'Asia/Shanghai');

        require_once(ROOT_PATH . "WxpayAPI/lib/WxPay.Api.php");
        require_once(ROOT_PATH . "WxpayAPI/example/WxPay.JsApiPay.php");
        require_once(ROOT_PATH . "WxpayAPI/example/log.php");
        require_once(ROOT_PATH . "WxpayAPI/example/WxPay.NativePay.php");
        $notify = new NativePay();
        $notify->GetPrePayUrl("123456789");
        //②、统一下单
        $input = new WxPayUnifiedOrder();
        $input->SetBody('支付页面');//支付页面标题
        $input->SetAttach($attach);
        $out_trade_no = WxPayConfig::MCHID . date("YmdHis");
        $input->SetOut_trade_no($out_trade_no);
        $input->SetTotal_fee($fee * 100);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url("回调函数url");//回调函数
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id($power);//goods_id
        $result = $notify->GetPayUrl($input);
        return $result["code_url"];
        }

下面是调用统一下单函数获得二维码:


//微信支付统一下单
 $attach_info = array();
  $attach_info['user_id'] = $_SESSION['user_id'];//用户id
  $attach_info['power'] = $_GET['goodid'];//商品id
  $attach_info['payid'] = $_GET['payid'];//订单号
  $attach_info['orderid'] = $_GET['orderid'];//订单号
  $attach_info['fee'] = substr_replace($_GET['payNum'],"",0,3);//费用

  $wxorder_attachinfo_json = json_encode($attach_info);
  $code_url = construct_wxorder($wxorder_attachinfo_json, $attach_info['fee'], $attach_info['power']);//二维码URL

这段代码就是统一下单的代码,其中$attach_info这个数组内容是自己定义的,是发生支付的时候发送给回调函数的。而最后两句代码就是生成二维码,这个生成的二维码url是不能直接用的,大家可以到草料二维码是一下这个二维码是否有效先。至于转化二维码是有几种方式可以转化的,我用的是jq的一个插件转的,这里就不详说了。

好了下面就是回调函数(也就是扫码后执行的函数):

require_once(ROOT_PATH . "WxpayAPI/lib/WxPay.Api.php");
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];//接收数据
$return_data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);//转化格式

$return_code = $return_data->return_code; //返回通讯标识(SUCCESS/FAIL)
$result_code = $return_data->result_code; //业务标识(是否成功交易SUCCESS/FAIL)

$attach = $return_data->attach;//取出数据
$attach=json_decode($attach,true);

        if ($return_code == "SUCCESS") {
            //通讯成功
            if ($result_code == "SUCCESS") {
               //这里就是写支付成功后的数据或者数据库操作

            }
        }

到这里整个支付过程已经完成,配合微信支付官方文档看会更好;新人刚开始写文章,如果有写得不好的地方请大家见谅,也欢迎大家来指正。

猜你喜欢

转载自blog.csdn.net/weixin_42824337/article/details/81269158