easywechat开发微信支付功能的代码和方法

知识技术 2022-05-02 11:10 876
转载请务必注明: 来源:《建站管家》https://www.df81.com/news/339.html

easywechat是神一样的存在。非常好用。希望大家都能转到这上面来。

easywechat来开发微信支付功能,步骤如下:


一,需要有一个商品下单页面,页面上有你的商品的信息,还要有购买数量,和一个购买按钮。用户在这个页面浏览商品信息的时候,可以选择购买的数量,然后点击提交进入下一个页面。(这个页面,跟淘宝的商品购买页面一样。)


二,创建一个页面,接收上面一步提交来的数据,然后做如下计算 。

1,根据商品ID或是提交来的商品信息,生成商品的参数数组。

$product = [
    'trade_type'       => 'JSAPI', // 微信公众号支付填JSAPI
    'body'             => '一盒火柴',
    'detail'           => '一盒火些',
    'out_trade_no'     => 'MYERPORDERID12345678', // 这是自己ERP系统里的订单ID,不重复就行。
    'total_fee'        => 8888, // 金额,这里的8888分人民币。单位只能是分。
    'notify_url'       => 'https://www.df81.com/order_notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
    'openid'           => 'you-open-id', // 这个不能少,少了要报错。
    // ...  基本上这些参数就够了,或者参考微信文档自行添加删除。
];


2,接下来,生成商品对象。

 $order = new Order($product);


3,再接下来,要进行调用前计算了。

        $app = new Application(config('wechat'));
        $payment = $app->payment;
        $result = $payment->prepare($order); // 这里的order是上面一步得来的。 这个prepare()帮你计算了校验码,帮你获取了prepareId.省心。
        $prepayId = null;
        if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){
            $prepayId = $result->prepay_id; // 这个很重要。有了这个才能调用支付。
        } else {
            var_dump($result);
            die("出错了。");  // 出错就说出来,不然还能怎样?
        }
        $config = $payment->configForJSSDKPayment($prepayId); // 这个方法是取得js里支付所必须的参数用的。 没这个啥也做不了,除非你自己把js的参数生成一遍


 4,就快进入正题,但是,还没完。还要取得一个数据。

        $app = new Application(config('wechat'));
        $js = $app->js;  // 这个是jssdk里页面上需要用到的js参数信息。


5,上面获得的$js 和 $config数据,要在页面里显示出来。

注意,上面几步都不涉及显示,只是在生成页面显示所需要的数据。

现在才需要把这些显示在页面上。

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">
        wx.config({{ <span style="font-family: Arial, Helvetica, sans-serif;">$js->config(array('chooseWXPay')) </span><span style="font-family: Arial, Helvetica, sans-serif;">}}); </span>
    </script>
    <script>
        $(function(){
 
            $(".btn-do-it").click(function(){
                wx.chooseWXPay({
                    timestamp: "{{$config['timestamp']}}", // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
                    nonceStr: '{{$config['nonceStr']}}', // 支付签名随机串,不长于 32 位
                    package: '{{$config['package']}}', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
                    signType: '{{$config['signType']}}', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
                    paySign: '{{$config['paySign']}}', // 支付签名
                    success: function (res) {
                        // 支付成功后的回调函数
                        if(res.err_msg == "get_brand_wcpay_request:ok" ) {
                            alert('支付成功。');
                            window.location.href="{{url("wechat/pay_ok")}}";
                        }else{
                            //alert(res.errMsg);
                            alert("支付失败,请返回重试。");
                        }
                    },
                    fail: function (res) {
                        alert("支付失败,请返回重试。");
                    }
                });
            });
        });
    </script>


没错,只需要修改这些。

 再来理一个,第二步里,这个页面需要显示一个确认信息,比如商品的名称,和支付的总金额。

页面上应该有一个按钮,用来触发支付(.btn-do-it)。

页面里的js就是第5步里要显示的内容。


总结:

第一步,商品信息页面,用户选择购买数据,点购买,提交到第二步的确认页面。

第二步的确认页面,根据商品信息,和微信配置信息,生成必要的支付数据,并显示购买确认信息,和一个支付按钮,

用户点击支付按钮,发起支付。

支付完成,提示用户,或转到相应页面。

微信的开发团队提醒我们,请以微信的推送信息为准来处理订单,不然有可能人财两空。

-分隔-


product.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>一盒火柴</title>
</head>
<body>
<h1>一盒火柴</h1>
<div>
    卖火柴的小女孩,手里有一堆火柴。
</div>
<hr>
<div>
    <form name="form1" action="payment.php" method="post">
        <lable>数量:</lable>
        <input name="qty" value="1" />
        <input name="submit" type="submit" value="购买" />
    </form>
</div>
</body>
</html>


payment.php

<?php
use EasyWeChat\Foundation\Application;
use EasyWeChat\Payment\Order;
 
$product = [
    'body'             => '一盒火柴',
    'trade_type'       => 'JSAPI',
    'out_trade_no'     => 'ERP'.time(),
    'total_fee'        => 1,
    'notify_url'       => 'https://www.df81.com/wechat/notify/',
    'openid'           => $_SESSION['openid'],
    'attach'           => '卖火柴的小女孩',
];
 
$order = new Order($product);
 
$app = new Application(config('wechat'));
$js = $app->js;
$payment = $app->payment;
$result = $payment->prepare($order);
$prepayId = null;
if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){
    $prepayId = $result->prepay_id;
} else {
    var_dump($result);
    die("出错了。");
}
$config = $payment->configForJSSDKPayment($prepayId);
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>购买支付</title>
</head>
<body>
 
<h1>一盒火柴</h1>
 
<div>
    <p>您购买了“一盒火柴”,总价格: 0.01元。</p>
    <p>数量:1盒。</p>
</div>
 
<hr>
 
<div>
    <input name="button" id="btnPay" type="button" value="支付" />
</div>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
    wx.config({{ $js->config(array('chooseWXPay')) }});
</script>
<script>
    $(function(){
 
        $(".btn-do-it").click(function(){
            wx.chooseWXPay({
                timestamp: "{{$config['timestamp']}}", // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
                nonceStr: '{{$config['nonceStr']}}', // 支付签名随机串,不长于 32 位
                package: '{{$config['package']}}', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
                signType: '{{$config['signType']}}', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
                paySign: '{{$config['paySign']}}', // 支付签名
                success: function (res) {
                    // 支付成功后的回调函数
                    if(res.err_msg == "get_brand_wcpay_request:ok" ) {
                        alert('支付成功。');
                        window.location.href="{{url("wechat/pay_ok")}}";
                    }else{
                        //alert(res.errMsg);
                        alert("支付失败,请返回重试。");
                    }
                },
                fail: function (res) {
                    alert("支付失败,请返回重试。");
                }
            });
        });
    });
</script>
</body>
</html>


这些是伪代码,payment.php并没有对product.html传来的商品信息做处理。

其实只要看payment.php文件应该知道怎么做了。

其它就两点。a,获取$config,b, 自己写wx.chooseWXPay。

其它的看easywechat文档就行了。


点赞 (0)

收藏 (0)

本站部分信息来源网络,如有侵权,请联系QQ:1062129401删除。

上一篇: 《建站管家》二次开发文档

下一篇: EasyWeChat利用临时二维码实现在电脑浏览器上的微信扫码登陆功能

请先登录后,再发表评论 ~ ~
发表评论
发表评论
发表帖子
广告位招租( ¥5 / 天 )
点击咨询
相关帖子

如果要判断文件是否存在,用函数 is_file(),如果要判断目录是否存在,用函数 is_dir()
用宝塔安装TP程序后,网站前台可以访问,后台无法访问,不是程序问题,而是web服务器环境配置问题(PHP配置),出现这种问题,一般是windows主机安装宝塔造成的,linux安装宝塔不会出现此错误
广告位招租( ¥3 / 天 )
点击咨询
广告位招租( ¥2 / 天 )
点击咨询
广告位招租( ¥1 / 天 )
点击咨询
最新帖子

小朋友,你爸爸是谁啊?这很单纯的,就像我们碰到别人会问:你吃过饭了吗?类似;许多人初次相识,经常会问:你是做什么的啊?你做什么,好像决定你收入的高低,你,资产的范围
1、升级框架到ThinkPHP8.0.3【要求PHP8.1+环境,推荐PHP8.1】 2、启用/禁用调试模式等小细节改进
后台点击生成站点地图 一直转圈圈没有反应,
在线客服