php服务端+小程序支付
第一步:先下载微信支付SDK与DEMO。下载链接:http://thinkphp.cn//code/download/id/3259.html 下载 Wxpay.rar
第二步:将下载的支付SDK与DEMO进行解压,然后打开这个解压后的文件夹。放到根目录 extend/ 下
第三步,从商家中心下载证书到本地放到 extend/cert 文件夹里面。
商家中心路径:(注意需要下载安全插件,且只能在IE模式登录!)
具体路径为:登录进去到商家中心后,登录微信支付商户平台,点击【账户中心】->【账户设置】->【API安全】->【下载证书】中
下载证书完成后,记得顺便设置密钥!!密钥要求:需要字母+数字一起32位数!!为的是认真和安全。
这个密钥等下需要在WxPay.Config.php里面配置支付。
第四步:配置支付信息 打开WxPay.Config.php
第五步: 小程序发起支付请求
1 , 小程序端代码
/** * 发起支付 */
formSubmit: function(e) {
var that = this;
const objData = e.detail.value;//表单传来的值
wx.login({
//获取code 并传到服务器获取 openid 发起支付
success: function (res) {
var code = res.code //返回code
wx.request({
url: 'https://xxxxx.com/Wxpay',
data: {
code: code,
cost: 2, //传给服务器的支付金额
},
header: { 'content-type': 'application/x-www-form-urlencoded' // 默认值 }, method: 'POST', success: function (res) { console.log(res.data); var test = res.data; var orderid = test.prepay_id; var timeStamp = (Date.parse(new Date()) / 1000).toString(); var nonceStr = test.nonce_str; var pkg = 'prepay_id=' + test.prepay_id; var paySign = md5.hexMD5('appId=' + test.appid + '&nonceStr=' + nonceStr + '&package=' + pkg + '&signType=MD5&timeStamp=' + timeStamp + "&key=6418f2d518xxxxa25d20xxxxxxb3c").toUpperCase(); wx.requestPayment({ 'timeStamp': timeStamp, 'nonceStr': nonceStr, 'package': pkg, 'signType': 'MD5', 'paySign': paySign, 'success': function (res) { console.log('付款成功'); }, 'fail': function (res) { console.log('付款失败); } }) } }); } }) },
注 : 简书不支持格式; 大家全部粘贴到小程序就会自动格式化了,谅解一下,为了节省地方
2.php服务端代码 (简书不支持格式,复制到编辑器即可)
<?php
namespace app\miniApps\controller;
use think\Controller;
use think\Db;
use think\Loader;
Loader::import('WxPay.WxPay', EXTEND_PATH, '.Api.php');//将附件放入根目录下的/extend
class Wxpay extends Controller {
function index() {
$res = $_POST; $cost = $res['cost']; //订单金额
$code = $res['code']; //用户code
$total_fee = $res['cost'];
$appid = 'wxbadxxxxx40f06';
$secret = '6418xxxxxxxxxxxxd36580b3c';
$url='https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='. $secret.'&js_code='.$code.'&grant_type=authorization_code';
$openid1 = file_get_contents($url);
$openid = json_decode($openid1,true)['openid'];
//订单号
$order=rand(10000,99999).time();
$money=$cost*100;
// 初始化值对象
$input = new \WxPayUnifiedOrder();
$input->SetBody("测试"); // 文档提及的参数规范:商家名称-销售商品类目
$input->SetOut_trade_no("$order"); // 订单号应该是由小程序端传给服务端的,在用户下单时即生成
$input->SetTotal_fee("$money"); // 费用应该是由小程序端传给服务端的,1,即1分钱
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid("$openid"); //上边已经手动获取到了
$order = \WxPayApi::unifiedOrder($input);
header("Content-Type: application/json"); // json化返回给小程序端
echo json_encode($order); // 向微信统一下单,并返回order,它是一个array数组
}
}
第六步:完成上面的步骤,微信支付调用即可完成!!!
祝大家技术进步!!!