1,首先我们先缕清支付的整个流程,详见https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3,第一步在自己的服务器上吊起微信支付,获取预支付订单id,第二步根据获取得APPID、随机数、预支付订单prepay_id、签名类型、时间生成签名,第三部将生成的签名和第一步获取得到信息一同返回给小程序,第四步小程序接收值发起支付

2.话不多说直接看代码

第一:吊起微信支付该方法返回的值有你需要得到prepay_id、随机字符串、签名类型、时间。还有一个签名切记这个签名不是我们给小程序的

    protected function weixin_pay($order)
{
Loader::import("weixinpay.lib.WxPay", EXTEND_PATH, ".Api.php");
Loader::import("weixinpay.example.log", EXTEND_PATH, ".php");
Loader::import("weixinpay.example.WxPay", EXTEND_PATH, ".Config.php");
$notify=new NativePay();
$logHandler= new \CLogFileHandler(EXTEND_PATH."weixinpay/logs/".date('Y-m-d').'.log');
$log = \Log::Init($logHandler, 15);
$input = new \WxPayUnifiedOrder();
$input->SetBody("xiaoasdhjasd");
$input->SetAttach("asdasd");
$input->SetOut_trade_no($order["order_number"]);
// $input->SetTotal_fee($order["money"]*100);
$input->SetTotal_fee("1");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("https://test.gdzhisheng.top/index.php/index/index/notify.html");
$input->SetTrade_type("JSAPI");
$input->SetProduct_id("407038");
$openid=$this->openid;
$input->SetOpenid($openid);
$api=new \WxPayApi();
$config=new \WxPayConfig();
$order = $api->unifiedOrder($config,$input);
return $order;
}

第二:将上一个方法得到的参数进行签名

    private function genPaySign($unifiedOrder, $time)
{
//$unifiedOrder是上一个方法返回的参数$time是一个时间戳
       $appId = "你的appid";
      $key="你的商户密钥";
$nonceStr = $unifiedOrder['nonce_str'];
$package = 'prepay_id='.$unifiedOrder['prepay_id'];
$signType = "MD5";
$timeStamp = $time; $sign = MD5("appId={$appId}&nonceStr={$nonceStr}&package={$package}&signType={$signType}&timeStamp={$timeStamp}&key={$key}"); return $sign;
}

第三:微信小程序下单,去后台获取, 发起支付

  xiadan: function (options) {var that = this;
var http = getApp();
var url = http.globalData.url
var openid = http.globalData.openid
wx.request({
url: url + '/index.php/index/index/buy_oneorder',
method: 'POST',
data: {
openid: openid,
order_id: options.order_id
},
success: function (res) {
that.setData({
order_id: options.order_id,
timeStamp: res.data.time,
nonceStr: res.data.pay.nonce_str,
package: res.data.pay.prepay_id,
paySign: res.data.sign,
})
}
})
},
buybuy:function(){
var that=this;
var http = getApp();
var openid = http.globalData.openid;
var url = http.globalData.url;
wx.requestPayment({
timeStamp: that.data.timeStamp,
nonceStr: that.data.nonceStr,
package: 'prepay_id=' + that.data.package,
signType: 'MD5',
paySign: that.data.paySign,
success: function (res) {
console.log('支付成功');
},
complete: function (res) {
console.log(res);
}
})
}

希望对你有所帮助!

微信小程序调用微信支付的更多相关文章

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

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

  2. 微信小程序调用微信登陆获取openid及用户信息 java做为服务端

    转载的文章,很不错 https://blog.csdn.net/weilai_zhilu/article/details/77932630

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

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

  4. 图解微信小程序---调用API操作步骤

    图解微信小程序---调用API操作步骤 什么是API API(Application Programming Interface,应用程序编程接口:是一些预先定义的函数,目的是提供应用程序与开发人员基 ...

  5. 微信小程序之微信登陆 —— 微信小程序教程系列(20)

    简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...

  6. 微信小程序和微信公众号的id是一个吗

    首先,简单说下我遇到的问题是我们的程序调用微信小程序得到openid,然后通过openID得到用户的唯一标识,用户得以登录,然而,当我们调用微信公众号也同样的到openid,同一以用户两个不同的ope ...

  7. 微信小程序与微信公众号同一用户登录问题

    微信小程序与微信公众号同一用户登录问题 最近在做微信小程序与微信公众号登录合并的接口.整理相关资料以及个人认识的心得写了这篇文章与大家一起分享. 首先,简单说下我遇到的问题是我们的程序调用微信小程序得 ...

  8. 微信小程序结合微信公众号进行消息发送

    微信小程序结合微信公众号进行消息发送 由于小程序的模板消息已经废弃了,官方让使用订阅消息功能.而订阅消息的使用限制比较大,用户必须得订阅.需要获取用户同意接收消息的权限.用户必须得和小程序有交互的时候 ...

  9. 微信小程序(微信应用号)开发ide安装解决方法

    这两天整个技术圈都炸锅了,微信小程序(微信应用号)发布内测,首批200家收到邀请,但是没受邀请的同学,也不用担心,下面介绍一下解决方法. 首先需要下载ide,昨天只需要下载0.9版本的编辑器并替换文件 ...

随机推荐

  1. Tampermonkey脚本安装问题及自用脚本推荐

    对于高手来说,chrome浏览器中即使没有其他任何chrome插件,可能都无关紧要.但是有一个插件必不可少, 那就是Tampermonkey油猴插件.Tampermonkey是Chrome上最流行的用 ...

  2. 关于pom.xml中的dependency中的顺序

    特别注意: <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>l ...

  3. 设置mysql5.7远程连接-----------https://blog.csdn.net/qiyueqinglian/article/details/52778230

    https://blog.csdn.net/qiyueqinglian/article/details/52778230 设置mysql5.7远程连接

  4. noip模拟赛 动态规划

    题目描述LYK在学习dp,有一天它看到了一道关于dp的题目.这个题目是这个样子的:一开始有n个数,一段区间的价值为这段区间相同的数的对数.我们想把这n个数切成恰好k段区间.之后这n个数的价值为这k段区 ...

  5. kafka+spark-streaming实时推荐系统性能优化笔记

    1) --conf spark.dynamicAllocation.enabled=false 如果正在使用的是CDH的Spark,修改这个配置为false:开源的Spark版本则默认是false. ...

  6. spring-quartz定时器简单用法

    基本配置: 1.quartz.properties #============================================================== #Configure ...

  7. POJ 1328 Radar Installation 贪心算法

    Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...

  8. Hadoop2.0之YARN

    YARN(Yet Another Resource Negotiator)是Hadoop2.0集群中负责资源管理和调度以及监控运行在它上面的各种应用,是hadoop2.0中的核心,它类似于一个分布式操 ...

  9. [转]C++回调函数(callback)的使用

    原文地址:http://blog.sina.com.cn/s/blog_6568e7880100p77y.html 什么是回调函数(callback)    模块A有一个函数foo,他向模块B传递fo ...

  10. java中打印数组的5种方法

    Arrays.toString(arr) for(int n: arr) System.out.println(n+", "); for (int i = 0; i < ar ...