红包接口调用:javascript
在使用红包请求功能的时候,注意mch_billno(商户订单号)这个参数;php
商户订单号(每一个订单号必须惟一)html
组成: mch_id+yyyymmdd+10位一天内不能重复的数字。java
微信支付:数组
用easywechat来开发微信支付功能,步骤以下:微信
一,须要有一个商品下单页面,页面上有你的商品的信息,还要有购买数量,和一个购买按钮。微信开发
用户在这个页面浏览商品信息的时候,能够选择购买的数量,而后点击提交进入下一个页面。app
(这个页面,跟淘宝的商品购买页面同样。)函数
二,建立一个页面,接收上面一步提交来的数据,而后作以下计算 。post
1,根据商品ID或是提交来的商品信息,生成商品的参数数组。
- $product = [
- 'trade_type' => 'JSAPI',
- 'body' => '一盒火柴',
- 'detail' => '一盒火柴',
- 'out_trade_no' => 'MYERPORDERID12345678',
- 'total_fee' => 8888,
- 'notify_url' => 'http://www.xxx.com/order_notify', // 支付结果通知网址,若是不设置则会使用配置里的默认地址 (填写发起支付请求的网址)
- 'openid' => 'you-open-id',
-
- ];
2,接下来,生成商品对象。
- $order = new Order($product);
3,再接下来,要进行调用前计算了。
- $app = new Application(config('wechat'));
- $payment = $app->payment;
- //统一下单(像公众号支付、扫码支付、APP支付都使用这个接口)
- $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);
4,就快进入正题,可是,还没完。还要取得一个数据。
- $app = new Application(config('wechat'));
- $js = $app->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({{ $js->config(array('chooseWXPay')) }});
- </script>
- <script>
- $(function(){
-
- $(".btn-do-it").click(function(){
- wx.chooseWXPay({
- timestamp: "{{$config['timestamp']}}",
- nonceStr: '{{$config['nonceStr']}}',
- package: '{{$config['package']}}',
- signType: '{{$config['signType']}}',
- 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("支付失败,请返回重试。");
- }
- },
- fail: function (res) {
- alert("支付失败,请返回重试。");
- }
- });
- });
- });
- </script>
没错,只须要修改这些。
再来理一个,第二步里,这个页面须要显示一个确认信息,好比商品的名称,和支付的总金额。
页面上应该有一个按钮,用来触发支付(.btn-do-it)。
页面里的js就是第5步里要显示的内容。
总结:
第一步,商品信息页面,用户选择购买数据,点购买,提交到第二步的确认页面。
第二步的确认页面,根据商品信息,和微信配置信息,生成必要的支付数据,并显示购买确认信息,和一个支付按钮,
用户点击支付按钮,发起支付。
支付完成,提示用户,或转到相应页面。
微信的开发团队提醒咱们,请以微信的推送信息为准来处理订单,否则有可能人财两空。
product.html
- <!DOCTYPE html>
- <html lang="en">
- <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' => 'http://test.xxoo.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 lang="en">
- <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']}}",
- nonceStr: '{{$config['nonceStr']}}',
- package: '{{$config['package']}}',
- signType: '{{$config['signType']}}',
- 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("支付失败,请返回重试。");
- }
- },
- fail: function (res) {
- alert("支付失败,请返回重试。");
- }
- });
- });
- });
- </script>
- </body>
- </html>
这些是伪代码,payment.php并无对product.html传来的商品信息作处理。
其实只要看payment.php文件应该知道怎么作了。
其它就两点。a,获取$config,b, 本身写wx.chooseWXPay。
其它的看easywechat文档就好了。