热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序支付流程

支付步骤逻辑:1.小程序发起请求预支付2.服务端调用接口发起预支付信息3.微信小程序调起支付完成支付1.小程序发起请求预支付2.服务端调用接口发起预支付信息服务端接收到请求后,调用微信的ap...

支付步骤逻辑:

1. 小程序发起请求预支付

2. 服务端调用接口发起预支付信息

3. 微信小程序调起支付完成支付

1. 小程序发起请求预支付

2. 服务端调用接口发起预支付信息

服务端接收到请求后,调用微信的api接口,调用成功会得到一个prepay_id 这个就是相当于小程序的预支付id 过程中会生成签名,按照官方文档的实例参数生成即可,如果非必填可选择不填,然后向 api 发送一个xml


   wx2421b1c4370ec43b
   支付测试
   JSAPI支付测试
   10000100
   
   1add1a30ac87aa2db72f57a2375d8fec
   [url]http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php<;/notify_url>[/url]
   oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
   1415659990
   14.23.150.211
   1
   JSAPI
   0CB01533B8C1EF103065174F50BCA001

需要注意sign 生成方式和公众号生成方式一致,下面是PHP生成签名方法, 可根据不同的框架修改,记得修改 key

 /**
     * 生成签名
     * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
     */
    public function MakeSign()
    {
        //签名步骤一:按字典序排序参数
        ksort($this->_prepay);
        $string = $this->ToUrlParams();
        //签名步骤二:在string后加入KEY
        $string = $string . "&key=".WxPayConfig::KEY;
        //签名步骤三:MD5加密
        $string = md5($string);
        //签名步骤四:所有字符转为大写
        $result = strtoupper($string);
        return $result;
    }
    /**
     * 格式化参数格式化成url参数
     */
    public function ToUrlParams()
    {
        $buff = "";
        foreach ($this->values as $k => $v)
        {
            if($k != "sign" && $v != "" && !is_array($v)){
                $buff .= $k . "=" . $v . "&";
            }
        }
        $buff = trim($buff, "&");
        return $buff;
    }

调用统一下单api

/**
     * 统一下单调取返回值
     * @return mixed
     * $output[&#39;return_code&#39;] 状态码 SUCCESS/FAIL
     * $output[&#39;return_msg&#39;] 返回信息,如非空,为错误原因 签名失败 参数格式校验错误
     * $output[&#39;time&#39;] 当前时间戳
     * $output[&#39;nonceStr&#39;] 随机字符串
     * $output[&#39;prepay_id&#39;] 预支付id
     * $output[&#39;sign&#39;] 签名
     * */
    public function pay_place_order()
    {
        $xml = &#39;
                   &#39;.$this->_prepay[&#39;appid&#39;].&#39;
                   &#39;.$this->_prepay[&#39;body&#39;].&#39;
                   &#39;.$this->_prepay[&#39;mch_id&#39;].&#39;
                   &#39;.$this->_prepay[&#39;nonce_str&#39;].&#39;
                   &#39;.$this->_prepay[&#39;notify_url&#39;].&#39;
                   &#39;.$this->_prepay[&#39;openid&#39;].&#39;
                   &#39;.$this->_prepay[&#39;out_trade_no&#39;].&#39;
                   &#39;.$this->_prepay[&#39;spbill_create_ip&#39;].&#39;
                   &#39;.$this->_prepay[&#39;total_fee&#39;].&#39;
                   &#39;.$this->_prepay[&#39;trade_type&#39;].&#39;
                   &#39;.$this->MakeSign().&#39;
                &#39;;
//调用api,自定义对参数进行处理,改请求方式是自定义方式 
        $xml_result = post_request_https(&#39;https://api.mch.weixin.qq.com/pay/unifiedorder&#39;, $xml);

对返回的参数从新生成sign,得到一个新的sign,返回小程序

注意: 生成返回小程序签的名参与生成的签名的字段有下图,记得拼接key ,使用的是调取api 返回的值

3. 微信小程序调起支付完成支付

以上就是微信小程序支付流程的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
author-avatar
__-霖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有