微信支付,到底是什么个流程?

    关于微信支付的流程问题,特别是对小白用户来说,那是真的一个“折腾”,如果没人带,或者没人指导,那再就……

    网上文档一大堆,但如果不知道其中的逻辑,再多的文档,都是没用的。

    直接说逻辑吧(以充值为例)

    一、充值的例子

    1、首先有个充值的页面。这个页面,可以让客户填写或选择充值的金额。然后有个提交按钮,把对应的充值金额提交到后台的某个方法,比如金额、用户的OpenID。

    2、统一下单的页面,也就是微信所说的统一下单方法。这个页面里面,主要是让客户确认他的充值金额并提交。

    这个页面对应的方法,要把客户的充值金额、微信OpenID配置到微信统一下单的JS参数配置里面。不多说,上代码。    

$tools = new \JsApiPay();
    //$openId = $tools->GetOpenid();
    $input = new \WxPayUnifiedOrder();
    $input->SetBody("进行支付");                                      // 商品描述 *
    $payrecord_num = \WxPayConfig::MCHID.date("YmdHis");
    $input->SetOut_trade_no($payrecord_num);  // 商户订单号 *
    $input->SetTotal_fee("$num");                                    // 总金额 *
    $input->SetNotify_url("http://xjs.qhhpjy.com/home/weixin/payresult"); // 通知地址 *
    $input->SetTrade_type("JSAPI");                               // 交易类型 *
    $input->SetOpenid($openId);                                   // openid *
    $order = \WxPayApi::unifiedOrder($input);
    $jsApiParameters = $tools->GetJsApiParameters($order);
    $this->assign("num",$num/100);   
    $this->assign('jsApiParameters',$jsApiParameters);

(1)微信支付的金额是以分来计算的。所以我们要把接收过来的充值金额乘以100。

(2)在这个地方,我们要进行入库操作,也就是把客户提交的数据入库,以便后续的操作。只是在数据入库时,我们要有一个字段对数据进行标记,比如pay_record_status为“未支付”。

(3)我们入库客户的充值数据时,要记得把金额转成元,除以100。这个具体要看自己怎么处理的数据了。

(4)要把支付单号一并入库,以便后续支付成功回调时的业务处理。

扫描二维码关注公众号,回复: 2995959 查看本文章

3、客户点击“统一下单页面”进行支付。用户支付后,逻辑上进入到“支付回调”,在支付回调中,我们要处理以下功能。

(1)接收来自微信服务器的回调数据。

(2)通过接收回调来的“商户订单号”来数据库查找相应的记录。

(3)如果此条记录的支付状态为“已支付”,则在业务上进行die掉,否则微信会发起多次回调请求,那就乱了。

(4)如果此条记录的支付状态为“未支付”,客户已经成功支付,则把此条记录的pay_record_status的值改为“已支付”。

(4)发送模板消息,通知客户已经充值成功。

其实这个里面,也有个如何处理微信发过来的回调数据的问题,我发关键代码喽。

 $dataFromClient = $GLOBALS["HTTP_RAW_POST_DATA"];
 $postObj = simplexml_load_string($dataFromClient, 'SimpleXMLElement', LIBXML_NOCDATA);
 //微信支付单号
 //$transaction_id = $postObj-> transaction_id;
 //商户订单号
 $out_trade_no = $postObj-> out_trade_no;
 //付款人微信openid
 $openid = $postObj-> openid;
 //支付金额 
 $total_fee = $postObj-> total_fee;
 $total_fee = $total_fee/100;
当然,每个人的处理方式不一样,这只是我的处理方式而已。希望能帮助到大家。

猜你喜欢

转载自blog.csdn.net/liuzhaoyun/article/details/80374824
今日推荐