微信支付(公众号支付)总结

1.首先我们下载好sdk包,这个时候首先要配置config文件

2.然后在example文件夹下打开jsapi.php 和 WxPay.JsApiPay.php

注:其实jsapi.php里面写的就是支付需要的步骤,里面的方法在 WxPay.JsApiPay.php里面慢慢的找都可以找到

3.需要注意的是如果是在yii框架中那么这个支付下载下来的文件包需要重构一遍代码,因为require等这种的包含方法有时候似乎不管用甚至是报错!

主要就是将控制器里面的class单独拿出来写成新的.php文件,要注意注意注意格外注意重新写的时候命名空间的规则(文件名和class名称要一致,此外namespace也要可以访问到,尽量写全文件路径)

如图:

不管是哪个文件必须都是全部的名称,改完了之后就可以参照着写了!在新的控制器必须引用所有用到的方法的控制器,不然会提示找不到

<?php

namespace backend\modules\api\controllers;

use common\models\SmsReport;
use common\models\Aes;
use common\models\Counter;
use common\models\Phone;
use common\models\Ewm;
use common\models\EwmLog;
use common\models\ParentList;
use common\models\City;
use common\models\oss\oss;

use backend\modules\api\models\Goods;
use backend\modules\api\models\lists\GoodsList;

use Yii;
use yii\rest\Controller;
use backend\modules\api\common\lib\Helper;
use backend\modules\api\models\User;
use backend\modules\api\models\Register;
use backend\modules\api\models\Orders;
use backend\modules\api\models\Wxpay;
use backend\modules\api\models\Zfbpay;
use backend\modules\api\models\Share;
use backend\modules\api\common\lib\HttpUploadFile;
use yii\base\Object;
use backend\modules\api\models\Login;
use backend\modules\api\models\Banner;
use backend\modules\api\models\operates\UserOperate;
use backend\modules\api\models\details\MomentsDetail;
use backend\modules\api\models\lists\UserList;
use backend\modules\api\models\lists\MomentsCommentsList;
use backend\modules\api\models\Journalism;
use backend\modules\api\models\Journalismbanner;
use backend\modules\api\models\Encyclopedias;
use backend\modules\api\models\EncyclopediasComments;
use backend\modules\api\models\EncyclopediasTagsLog;
use backend\modules\api\models\JournalismTagsLog;
use backend\modules\api\models\details\SosDetail;
use backend\modules\api\models\lists\SosOperateList;
use backend\modules\api\models\lists\SosList;
use backend\modules\api\models\Screen;
use backend\modules\api\models\QuestionShare;
use backend\modules\api\models\Question;
use backend\modules\api\models\Collection;
use backend\modules\api\models\Pet;
use backend\modules\api\models\PetCategory;
use backend\modules\api\models\WxUser;
use common\models\wxpay\example\JsApiPay;
use common\models\wxpay\lib\WxPayApi;
use common\models\wxpay\lib\WxPayDataBase;
use common\models\wxpay\example\Log;
use common\models\wxpay\lib\WxPayUnifiedOrder;
use common\models\wxpay\lib\WxPayConfig;

header(‘Access-Control-Allow-origin:*‘);
header(‘Access-Control-Allow-Credentials:true‘);
header(‘Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS‘);
header(‘Access-Control-Allow-Headers:Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With‘);
header(‘Content-Type: text/html; charset=utf-8‘);

class WxpayController extends Controller{

    public function behaviors() {
        $behaviors = parent::behaviors();
        unset($behaviors [‘authenticator‘]);
        return $behaviors;
    }

    public function actionIndex(){
        //接收信息生成订单
        $user_id = Yii::$app->request->post(‘user_id‘)?Yii::$app->request->post(‘user_id‘):null;
        $username = Yii::$app->request->post(‘username‘)?Yii::$app->request->post(‘username‘):null;
        $area = Yii::$app->request->post(‘area‘)?Yii::$app->request->post(‘area‘):null;
        $address = Yii::$app->request->post(‘address‘)?Yii::$app->request->post(‘address‘):null;
        $phone = Yii::$app->request->post(‘phone‘)?Yii::$app->request->post(‘phone‘):null;
        $goods_img = Yii::$app->request->post(‘goods_img‘)?Yii::$app->request->post(‘goods_img‘):null;
        $goods_name = Yii::$app->request->post(‘goods_name‘)?Yii::$app->request->post(‘goods_name‘):null;
        $goods_color = Yii::$app->request->post(‘goods_color‘)?Yii::$app->request->post(‘goods_color‘):null;
        $goods_num = Yii::$app->request->post(‘goods_num‘)?Yii::$app->request->post(‘goods_num‘):null;
        $goods_price = Yii::$app->request->post(‘goods_price‘)?Yii::$app->request->post(‘goods_price‘):null;
        $goods_brand = Yii::$app->request->post(‘goods_brand‘)?Yii::$app->request->post(‘goods_brand‘):null;
        $goods_content = Yii::$app->request->post(‘goods_content‘)?Yii::$app->request->post(‘goods_content‘):null;
        $remarks = Yii::$app->request->post(‘remarks‘)?Yii::$app->request->post(‘remarks‘):null;
        $goods_id = Yii::$app->request->post(‘goods_id‘)?Yii::$app->request->post(‘goods_id‘):null;

        //订单号
        $order_sn = WxPayConfig::MCHID.date("YmdHis");
        //总价
        $price_count = Yii::$app->request->post(‘price_count‘)?Yii::$app->request->post(‘price_count‘):null;

        $model = new Orders();
        $model->user_id = $user_id;
        $model->order_sn = $order_sn;
        $model->username = $username;
        $model->area = $area;
        $model->address = $address;
        $model->phone = $phone;
        $model->goods_img = $goods_img;
        $model->goods_name = $goods_name;
        $model->goods_color = $goods_color;
        $model->goods_num = $goods_num;
        $model->goods_price = $price_count;
        $model->goods_brand = $goods_brand;
        $model->create_time = time();
        $model->goods_content = $goods_content;
        $model->remarks = $remarks;
        $model->goods_id = $goods_id;
        $model->pay_status = 1;
        $model->insert();

        //支付
        $tools = new JsApiPay();
        $openId = $tools->GetOpenid();

        $input = new WxPayUnifiedOrder();
        $input->SetBody($goods_name);
        $input->SetAttach("暂无附加信息");
        $input->SetOut_trade_no($order_sn);
        $input->SetTotal_fee($price_count);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("本价");
        $input->SetNotify_url("http://www.peita.net/api/register/notify");
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($openId);
        $order = WxPayApi::unifiedOrder($input);
        $jsApiParameters = $tools->GetJsApiParameters($order);
        return json_decode($jsApiParameters);
    }
}

以上到最后的返回其实就已经给到前端支付需要用到的所有的参数了

那么还是要再说一下$input->SetNotify_url("http://www.peita.net/api/register/notify");的问题

之前我写的是http://www.peita.net?ak=notify

这样来看虽然可以访问不报错,但是实际是不可以的,链接中不可以带参数!!!!!!!!切记!

时间: 2024-09-27 03:39:28

微信支付(公众号支付)总结的相关文章

微信支付公众号支付redirect_uri域名与后台配置不一致,错误码10003

最近弄微信支付,微信支付公众号支付redirect_uri域名与后台配置不一致,错误码10003,最容易出错两个地方 1,appid 对应不到 2,开发者网页授权 填写域名 文章来自http://www.96net.com.cn 原文地址:https://www.cnblogs.com/96net/p/9648188.html

微信支付-公众号支付H5调用支付详解

微信公众号支付 最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验. 一.配置公众号微信支付 需要我们配置微信公众号支付地址和测试白名单. 比如:支付JS页面的地址为 http://www.xxx.com/shop/pay/ 那此处配置www.xxx.com/shop/pay/ 二.开发流程 借用微信公众号支付api(地址 http://pay.weixin.qq.com

企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET

先看效果: 1.本文演示的是微信[企业号]的H5页面微信支付 2.本项目基于开源微信框架WeiXinMPSDK开发:https://github.com/JeffreySu/WeiXinMPSDK 感谢作者苏志巍的开源精神 一.准备部分 相关参数: AppId:公众号的唯一标识(登陆微信企业号后台 - 设置 - 账号信息 - CorpID) AppSecret:(微信企业号后台 - 设置 - 权限管理 - 新建一个拥有所有应用权限的普通管理组 - Secret) Key:商户API密钥(登陆微信

微信支付-公众号支付,统一下单,调起微信支付,回调验证

参考:http://www.jianshu.com/p/a172a1b69fdd http://www.jianshu.com/p/1ae0ef652f63 http://www.jb51.net/article/76110.htm http://www.tangshuang.net/2359.html http://wyong.blog.51cto.com/1115465/1692322 常见问题http://kf.qq.com/faq/140225MveaUz150413VNj6nm.htm

微信公众号支付H5-java版代码

1,工具类 package net.jeeshop.core.util; import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder; import java.io.*;import java.math.BigDecimal;import java.net.ConnectException;import java.net.HttpUR

转-微信支付(公众号支付JSAPI)

原文路径:https://blog.csdn.net/javaYouCome/article/details/79473743 写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程会和"java的重写与重载"一样铺天盖地,可搜出来的结果,要么是PHP的教程(微信支付官网推荐就是PHP),要么星星点点就那么几篇,想对比的看看思路都成问题,官网

微信支付之JSAPI公众号支付

前提 本教程默认以下几点你已经完全满足: 开通了认证后的服务号 服务号开通的微信支付的认证 腾讯给你的邮件中有商户登录的账号和密码 拥有一个可供上传代码和设置回调域名的网站或云服务 有一点点php知识. 第一步:公众号设置 1. 你的公众号,在支付认证的标签下, 内容应该和下图类似.证明公众号已经完成了认证和合约的签署. 2. 然后在微信支付–开发配置中,设置测试授权目录和测试白名单 3. 在公众号设置-功能设置标签中,设置JS接口安全域名,这个域名在认证获取token的过程中可能会用到.但具体

2017-9月微信公众号支付-Java详解

微信支付源代码 在此之前,先C麻瓜藤N遍,MD官方文档一半正确一半错误.言归正传, 微信支付整体流程:微信授权登录商户的公众号--微信支付的公众号配置--统一下单--微信js调起支付页面--输入密码支付--支付成功,异步回调URL处理商户的相应业务 一.业务场景: 先看一下支付的业务场景:用户使用微信登录商户页面,点击支付按钮,调起微信支付,选择付款卡号,输入密码,完成支付,如图: 场景十分简单,不过步骤比较多,稍不注意就掉坑里了. 二.微信公众号支付的配置准备: 1)调用公众号支付,首先你得有

【微信开发】---- 公众号支付

公众号支付就是在微信里面的H5页面唤起微信支付,不用扫码即可付款的功能.做这个功能首先要明确的就是,只有和商户号mch_id匹配的appid才能成功支付.商户号在注册成功的时候就会将相关信息发送到邮箱里面.而唤起支付的一个关键是靠openid拿到统一下单.而openid是和appid一一对应的.也就是说如果你登录使用的appid不是公众号的appid,得到的openid就无法唤起公众号内的支付(会出现appid和商户号不匹配的错误).曾经就在这个地方绕了个弯,因为微信的开放平台可以创建网站应用,

微信公众号支付开发全过程 --JAVA

按照惯例,开头总得写点感想 ------------------------------------------------------------------ 业务流程 这个微信官网说的还是很详细的,还配了图.我还要再说一遍. 用户点击一个支付按钮-->{后台一大推处理}-->用户看到了一个输入密码的界面,包含金额等一些信息-->用户输入密码后出来一个支付成功的页面(这部分流程都是微信自己完成的,我们什么都不用做)-->返回系统自己的页面(总不能让用户一直看着一个支付完成的页面吧