首页 技术 正文
技术 2022年11月20日
0 收藏 859 点赞 2,357 浏览 2469 个字

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); } })}

希望对你有所帮助!

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893