微信小程序支付 后端PHP


看文章 扫一扫 领红包哦

前端:比较简单,在对应的支付事件上进行网络请求就好:

微信小程序支付 后端PHP(二)

  view_moneysure:function(){

    var code = this.data.code;
    console.log('code是' +code)
    wx.request({
      url: 'https://...com/pay.php',//这个链接是后端写的
      header: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      data: {
        code: code,
      },
      method: 'POST', 
      success: function (response) {
        console.log( response.data);
        // 发起支付
        wx.requestPayment({
          'appId': response.data.appId,
          'timeStamp': response.data.timeStamp,
          'nonceStr': response.data.nonceStr,
          'package': response.data.package,
          'signType': 'MD5',
          'paySign': response.data.paySign,
          'success': function (res) {
            wx.showToast({
                title: '支付成功'
            });
            console.log(res);
          },
          'fail': function (res) {
            console.log(res)
          }
        });
      },
      fail: function (res) {
        console.log(res)
      }
    })
  },
后端代码:

1. pay.php //小程序请求的后端地址

<?php
/**
 * Created by PhpStorm.
 * User: UFO
 * Date: 17/7/18
 * Time: 下午5:31
 */
require_once  ('WxPay.Api.php');

class WXPay  {
    function index() {
        //         初始化值对象
        $input = new WxPayUnifiedOrder();
        //         文档提及的参数规范:商家名称-销售商品类目
        $input->SetBody("testceshi");
        //         订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
        $input->SetOut_trade_no(time().'');
        //         费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
        $input->SetTotal_fee("1");
        $input->SetNotify_url("https://...com/notify.php");//需要自己写的notify.php
        $input->SetTrade_type("JSAPI");
        //         由小程序端传给后端或者后端自己获取,写自己获取到的,
        $input->SetOpenid('UdhncondJcnkJnjknkcssdcAbckn');
        //$input->SetOpenid($this->getSession()->openid);
        //         向微信统一下单,并返回order,它是一个array数组
        $order = WxPayApi::unifiedOrder($input);
        //         json化返回给小程序端
        header("Content-Type: application/json");
        echo $this->getJsApiParameters($order);
    }

    private function getJsApiParameters($UnifiedOrderResult)
    {    //判断是否统一下单返回了prepay_id
        if(!array_key_exists("appid", $UnifiedOrderResult)
            || !array_key_exists("prepay_id", $UnifiedOrderResult)
            || $UnifiedOrderResult['prepay_id'] == "")
        {
            throw new WxPayException("参数错误");
        }
        $jsapi = new WxPayJsApiPay();
        $jsapi->SetAppid($UnifiedOrderResult["appid"]);
        $timeStamp = time();
        $jsapi->SetTimeStamp("$timeStamp");
        $jsapi->SetNonceStr(WxPayApi::getNonceStr());
        $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']);
        $jsapi->SetSignType("MD5");
        $jsapi->SetPaySign($jsapi->MakeSign());
        $parameters = json_encode($jsapi->GetValues());
        return $parameters;
    }
//这里是服务器端获取openid的函数
//    private function getSession() {
//        $code = $this->input->post('code');
//        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.WxPayConfig::APPID.'&secret='.WxPayConfig::APPSECRET.'&js_code='.$code.'&grant_type=authorization_code';
//        $response = json_decode(file_get_contents($url));
//        return $response;
//    }
}
$WxPay = new WXPay();
$WxPay->index();

2.  微信SDK 下载链接: https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip

 解压在lib文件夹下可以看到:


放到服务端可访问的目录下。

WxPayConfig.php里面配置账号信息:

class WxPayConfig
{
	//=======【基本信息设置】=====================================
	//
	/**
	 * TODO: 修改这里配置为您自己申请的商户信息
	 * 微信公众号信息配置
	 * 
	 * APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
	 * 
	 * MCHID:商户号(必须配置,开户邮件中可查看)
	 * 
	 * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
	 * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
	 * 
	 * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
	 * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
	 * @var string
	 */
	const APPID = 'wx123456789...';//这里填上自己的对应信息
	const MCHID = '14151666888';
	const KEY = '11223344556677889900';
	const APPSECRET = '828bfsdibfsiubfikdbfik';
	const NOTIFY_URL='https://...com/notify.php';


注:

期间遇到一个签名错误,一直不好,使用微信支付接口签名校验工具校验也没有错,像网上说的漏写错写参数都查了,就是一直返回<return_code><![CDATA[FAIL]]></return_code>

<return_msg><![CDATA[签名错误]]></return_msg>
这样的信息,最后解决办法是:重置了KEY (商户支付密钥),重置的和之前的一模一样,但竟然就可以了...

问题主要都是报签名错误,仔细检查就好,比如XML格式不对,MD5加密后的位数,字典排序没排好,缺少参数等...

https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1&index=1

3.最后附上notify.php

<?php
/**
 * Created by PhpStorm.
 * User: UFO
 * Date: 17/7/13
 * Time: 下午6:42
 */
require_once ('WxPay.Api.php');
require_once ('WxPay.Notify.php');
class PayNotifyCallBack extends WxPayNotify
{
    //查询订单
    public function Queryorder($transaction_id)
    {
        $input = new WxPayOrderQuery();
        $input->SetTransaction_id($transaction_id);
        $result = WxPayApi::orderQuery($input);
        if(array_key_exists("return_code", $result)
            && array_key_exists("result_code", $result)
            && $result["return_code"] == "SUCCESS"
            && $result["result_code"] == "SUCCESS")
        {
            return true;
        }
        return false;
    }

    //重写回调处理函数
    public function NotifyProcess($data, &$msg)
    {
        $notfiyOutput = array();

        if(!array_key_exists("transaction_id", $data)){
            $msg = "输入参数不正确";
            return false;
        }
        //查询订单,判断订单真实性
        if(!$this->Queryorder($data["transaction_id"])){
            $msg = "订单查询失败";
            return false;
        }
        return true;
    }
}
$notify = new PayNotifyCallBack();
$notify->Handle(false);


欢迎留言交流指正!

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
基于微信小程序的新闻资讯微信小程序后端可以使用PHP框架进行开发,常用的PHP框架包括但不限于 Laravel、Symfony、Yii 等。下面是一个简要的描述: 新闻资讯微信小程序后端开发基于PHP框架,旨在为用户提供一个快速、稳定的新闻浏览平台,同时满足用户对于新闻内容的个性化需求。该系统主要面向用户和管理员,提供以下主要功能模块: 用户系统:支持用户注册、登录和个人信息管理功能,用户可以通过微信账号登录,实现个性化的新闻浏览和订阅功能。 新闻分类与检索:系统提供多种新闻分类和检索功能,用户可以根据兴趣爱好浏览和搜索感兴趣的新闻内容,包括国内新闻、国际新闻、财经、科技、娱乐等分类。 新闻推荐与定制:系统可以根据用户的阅读历史和偏好,为用户推荐个性化的新闻内容,提供定制化的新闻推荐服务,增加用户粘性和满意度。 新闻发布与管理:管理员可以在后台管理系统中发布和管理新闻内容,包括新闻编辑、审核、下架等功能,确保新闻内容的质量和及时性。 评论与互动:用户可以在阅读新闻过程中发表评论、点赞或分享到朋友圈,与其他用户进行交流和互动,增加阅读乐趣和社交体验。 数据统计与分析:系统可以统计和分析用户的阅读行为和偏好,包括热门新闻、用户活跃度等,为内容提供商和广告商提供数据支持。 通过以上功能的设计与实现,基于PHP框架的新闻资讯微信小程序后端为用户提供了一个快速、个性化的新闻浏览平台,满足用户多样化的阅读需求,促进了新闻信息的传播和推广。
SSM项目小程序“微信小程序新闻资讯微信小程序开发后端Php.zip”是一个基于Spring、Spring MVC和MyBatis(SSM)框架开发的微信小程序,专为提供新闻资讯服务的平台。该项目结合了微信小程序的便捷性和PHP语言的技术优势,旨在为读者提供一个方便、快捷、全面的新闻资讯阅读体验。 以下是该微信小程序新闻资讯的核心功能和特点: 1. **新闻分类与搜索**:提供丰富的新闻分类,用户可以根据兴趣选择浏览不同类型的新闻,并支持关键词搜索。 2. **实时更新**:系统自动抓取最新的新闻资讯,确保用户能够及时获取到最新的信息。 3. **个性化推荐**:根据用户的阅读历史和偏好,智能推荐可能感兴趣的新闻内容。 4. **评论互动**:用户可以对新闻进行评论和点赞,与其他读者进行交流和讨论。 5. **收藏与分享**:允许用户将感兴趣的新闻收藏起来,方便以后查看,同时支持一键分享到微信朋友圈。 6. **数据分析**:后台系统对用户行为和新闻数据进行分析,为新闻机构提供市场动态和消费趋势。 整个系统以微信小程序为前端,便于用户随时随地访问和使用;后端采用PHP语言,确保了数据处理的效率和稳定性。它不仅提供了一个便利的新闻资讯阅读工具,还通过综合化的服务和智能化的管理,提升了读者的信息获取能力和阅读体验,是现代新闻资讯平台的理想选择。
### 回答1: 微信小程序php后端搭建,主要分为以下几个步骤: 1. 安装php环境和相关依赖; 2. 配置php环境和相关依赖; 3. 编写后端代码; 4. 部署代码到服务器。 在搭建之前,你需要先确定要使用的php框架和数据库。目前常见的php框架有Laravel、Yii2、ThinkPHP等,而数据库则有MySQL、PostgreSQL等。这里以Laravel和MySQL为例。 1. 安装php环境和相关依赖 这里推荐使用PHP-FPM和NGINX,使用它们可以大大提升php应用的性能和稳定性。在安装完php和 NGINX 后,还需要安装相应的依赖,比如Composer等。 2. 配置php环境和相关依赖 在配置php环境和相关依赖时,需要分别对php、Composer和NGINX进行配置。配置好后就可以进行后端代码的编写。 3. 编写后端代码 使用Laravel框架编写php后端代码,可以利用它丰富的语法和类库,快速地实现业务逻辑。比如,实现用户注册、登录、权限管理等功能。 4. 部署代码到服务器 在开发和测试完成后,需要将php后端代码部署到服务器上。需要将代码和依赖一起打包,上传到服务器上。在服务器上,需要配置好环境、数据库等,然后再启动服务,从而让微信小程序前端可以请求到后端以实现想要的效果。 这是一个较为简单的微信小程序php后端搭建过程,实际操作会因人而异。如果您初次尝试,建议细心阅读相关配置文件和配置文档,以便稳定运行您的小程序。 ### 回答2: 微信小程序后端搭建需要使用到PHP语言,具体操作流程如下: 首先,需要搭建PHP环境,可以使用工具如WAMP、XAMPP或LAMP等。安装完成后,需要新建一个PHP文件。 接下来,需要引入微信官方提供的SDK,代码如下: require_once "{path}/wechat_sdk.php"; 除了SDK以外,还需要配置一些参数,如appId、appSecret、token、encodingAESKey等。 完成以上步骤后,就可以开始开发后端逻辑了。开发过程中需要调用微信官方提供的api,如获取access_token、获取用户信息等。 在开发过程中,需要注意安全问题,如接口的安全保护、防止SQL注入等。同时,需要对接口进行测试,查看返回数据是否符合预期。 最后,将开发好的后端逻辑部署到服务器上,接着就可以与微信小程序前端进行交互了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值