微信支付的接入,如果不使用成熟的开发包,将是巨大的工作量。

依赖 EasyWechat

先在 laravel 项目中依赖 easywechat 这个包

```composer require "overtrue/laravel-wechat":"^4.0"
```

配置
在 .env 中添加微信支付的 key 配置

```
WECHAT_PAYMENT_SANDBOX=false
WECHAT_PAYMENT_APPID=wx64c***
WECHAT_PAYMENT_MCH_ID=150***
WECHAT_PAYMENT_KEY=ZZDDD***
WECHAT_PAYMENT_CERT_PATH=/home/secret/apiclient_cert.pem
WECHAT_PAYMENT_KEY_PATH=/home/secret/apiclient_key.pem
WECHAT_PAYMENT_NOTIFY_URL=https://www.mysite.com/gateway/wxpay/callback
```

  • 如果你需要额外的配置,可以运行 php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider" ,然后在 config/wechat.php 中可以看到 easywecaht 可以支持的全部配置。

编写接口逻辑

新建一个 App/Repositories/PayRepository.php

<?php
namespace App\Repositories; use App\User;
use function EasyWeChat\Kernel\Support\generate_sign; class PayRepository
{
/**
* 发起微信支付
*
* @return Array
*/
public function pay(User $user)
{
$this->wxpay = app('easywechat.payment'); $unify = $this->wxpay->order->unify([
'body' => $this->transfer->name . ' ' . $this->tickets->count() . '张票',
'out_trade_no' => '订单号',
'total_fee' => bcmul('价格:单位元', 100),
'trade_type' => 'JSAPI',
'openid' => $user->openid, // 用户的openid
]); if ($unify['return_code'] === 'SUCCESS' && !isset($unify['err_code'])) {
$pay = [
'appId' => config('wechat.payment.default.app_id'),
'timeStamp' => (string) time(),
'nonceStr' => $unify['nonce_str'],
'package' => 'prepay_id=' . $unify['prepay_id'],
'signType' => 'MD5',
]; $pay['paySign'] = generate_sign($pay, config('wechat.payment.default.key')); return $pay;
} else {
$unify['return_code'] = 'FAIL';
return $unify;
}
}
}

新建一个 App/Http/Controllers/PayController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Repositories\PayRepository;
use Illuminate\Support\Facades\Response; class PayController extends Controller
{
/**
* PayRepository
*
* @var PayRepository
*/
protected $pay_repository; public function __construct(PayRepository $pay_repository)
{
$this->pay_repository = $pay_repository;
} /**
* 微信支付
*
* @return Response
*/
public function pay()
{
$user = auth()->user(); $pay = $this->pay_repository->pay($user);
return Response::success(['pay' => $pay]);
}
}

绑定路由 routes/api.php

<?php
Route::post('/buy/pay', 'PayController@pay')->name('pay');

编写JS逻辑

在页面 JS 里面编辑支付逻辑

```
onPay: function (e) {
wx.request({
url: '/api/buy/pay',
method: 'POST',
success: (res) => {
if (res.data.pay.result_code != 'SUCCESS') {
return wx.showModal({
content: res.data.pay.return_msg + res.data.pay.err_code_des,
showCancel: false
});
}
res.data.pay.success = (res) => {
wx.showModal({
content: '您已成功支付',
showCancel: false
});
};

            res.data.pay.fail = (res) => {
if (res.errMsg == 'requestPayment:fail cancel') {
return wx.showToast({
icon: 'none',
title: '用户取消支付',
});
}
}; wx.requestPayment(res.data.pay);
}
});
},

<p>在页面按钮上调用</p>
```&lt;button ontap="onPay"&gt;支付&lt;/button&gt;

效果

支付成功回调

关于回调处理请期待下一篇文章。

原文地址:https://segmentfault.com/a/1190000016177743

3分钟实现小程序唤起微信支付 Laravel教程的更多相关文章

  1. 微信小程序PHP 微信支付接口调用

    小程序端 /** * 微信支付接口 */ wxPaymoney:function (out_trade_no, true_money){ //out_trade_no 后台统一下单接口需要用 var ...

  2. 小程序开通微信支付 --- 微信商户平台绑定微信小程序APPID

    首先情况是这样的:现有公司有个公众号,已经开通了微信支付(已经有一个商户平台),现在需要开发 微信小程序(也有微信支付),如果在小程序里面重新申请 微信支付,就显得比较麻烦.腾讯官方已经提供了 一个商 ...

  3. springboot+微信小程序实现微信支付【统一下单】

    说明: 1)微信支付必须有营业执照才可以申请 2)微信支付官方api是全套的,我这是抽取其中的统一下单api,做了一个简单的封装 首先看看微信支付 商户系统和微信支付系统主要交互: 1.小程序内调用登 ...

  4. 微信小程序调用微信支付接口

    本文链接:https://blog.csdn.net/u012667477/article/details/80940578前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过 ...

  5. 微信小程序调微信支付

    今天写小程序的支付接口,参照的当然是微信支付API了.(结尾附上第二步全部代码php版) 另外,我也参照了简书上的这篇文章,浅显易懂:https://www.jianshu.com/p/72f5c1e ...

  6. 微信小程序之微信支付C#后台(统一下单)

    一.微信小程序支付 1.微信小程序端请求支付接口 商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付.具体可以查看接口示例. 接口传入参数示例: <xm ...

  7. .NET开发微信小程序-接收微信支付回调数据

    获取微信支付传回来的数据 1.MVC控制器 /// <summary> /// 付款返回的数据 /// </summary> /// <returns></r ...

  8. 微信小程序 使用微信支付功能实现在线订单支付

    以前做过PC页面微信支付,但是这次在小程序 直接调用微信支付功能还是方便很多 先放个微信官方API链接:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_a ...

  9. 微信小程序调用微信支付

    1,首先我们先缕清支付的整个流程,详见https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3,第一 ...

随机推荐

  1. double型转换成string型

    double型转换成string型 题目描写叙述: 如有一个函数.其可接受一个long double參数,并将參数转换为字符串.结果字符串应保留两位小数,比如,浮点值123.45678应该生成&quo ...

  2. 2014年百度之星程序设计大赛 - 资格赛 第一题 Energy Conversion

    小记:long long %I64d 代码: #include <iostream> #include <stdio.h> #include <string.h> ...

  3. TF101出现“DMClient已停止”处理办法

    设定->应用程式->全部->DMClient强制停止 然后 清除数据 然后 重开机 测试通过.

  4. THRDTERM-----干净地结束一个线程

    THRDTERM产生两个线程.周期性地检查一个event对象.以决定要不要结束自己. #define WIN32_LEAN_AND_MEAN #include<stdio.h> #incl ...

  5. axis2的wsdl无法使用eclipse axis1插件来生成client--解决方法

    使用jetty+axis2实现webservice服务端,且无需使用axis2命令生成服务端代码.仅仅要services.xml配置实现类. project为gradleproject配置文件在src ...

  6. bazel编译tensorflow 生成libtensorflow_inference.so 和 libandroid_tensorflow_inference_java.jar

    bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//externa ...

  7. 协议-网络-安全协议:SSH(安全外壳协议)

    ylbtech-协议-网络-安全协议:SSH(安全外壳协议) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立 ...

  8. JavaWEB开发入门

    1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: •静态web资源(如html 页面 ...

  9. [JavaEE] JBoss主要版本下载链接一览

    URL: http://teddysun.com/260.html JBoss在2006年被 RedHat 收购.在各种 J2EE 应用服务器中,JBoss 是最受欢迎而且功能最为强大的应用服务器.不 ...

  10. 洛谷P1040 加分二叉树(区间dp)

    P1040 加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di, ...