微信支付 easy wechat 使用
/*微信小程序的配置信息
微信商户信息
*/
public function __construct()
{
parent::__construct();
$this->OrderModel = new OrderModel();
$this->config = [
'app_id' => config('wechat.cmf_wechat_appid'),
'secret' =>config('wechat.cmf_wechat_appsecret'),
'mch_id' => ' ', //商户号
'key' => ' ', // API 密钥
'notify_url' => ' ', // 你也可以在下单时单独设置来想覆盖它
// 下面为可选项
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
'response_type' => 'array',
'log' => [
'level' => 'debug',
'file' => __DIR__.'/wechat.log',
],
];
}
/*拿到用户code 后下订单 创建订单
拿到用户加密信息后解析手机号phone
*/
public function creatOrder(){
$id = $this->getArg('id',1,'intval');
$code = $this->getArg('code');
//接收用户信息
$nickname = $this->getArg('nickname');
$headLogo = $this->getArg('headLogo');
$iv = $this->getArg('iv');//加密数据
$encryptedData = $this->getArg('encryptedData');//加密数据
$money = $this->getArg('amount',0.01,'float');
$fenmoney = 100*$money;
//获取opeinid
$app = Factory::miniProgram($this->config);
$userinfo=$app->auth->session($code);
if(array_key_exists('openid',$userinfo)){
$openid = $userinfo['openid'];
$session= $userinfo['session_key'];
//解密数据
$decryptedData = $app->encryptor->decryptData($session, $iv, $encryptedData);
//mydebug($decryptedData);
if(array_key_exists('phoneNumber',$decryptedData)){
$valData['phone']=$decryptedData['phoneNumber'];
}
else{
$decryptedData['phoneNumber']='111111';
}
}
else{
$this->returnJson(['code' =>401, 'msg' => '获取用户信息失败', 'data' => $userinfo]);
}
$order_id=date("YmdHis").rand(1000,9999);
//根据资助信息id 查看资助信息是否需要支付
$helpInfo=Children::getInstance()->getById($id);
if($helpInfo['data']['help_status']==0){
$valData['order_id']=$order_id;
$valData['open_id']=$openid;
$valData['help_id']=$helpInfo['data']['id'];
$valData['createtime']=time();
$valData['nickname']=$nickname;
$valData['money']=$money;
$valData['wx_headlogo']=$headLogo;
//添加支付订单信息
$orderInfo=db('order')->insertGetId($valData);
// $orderInfo=$this->OrderModel->insertGetId($valData);
//调用微信统一下单接口
if($orderInfo>0){
$payContent=[
'body' => '商品名称',
'out_trade_no' => $order_id,
'total_fee' => $fenmoney,
'spbill_create_ip' => '', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
'notify_url' => 'url', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'openid' => $openid,
];
$payinfo=$this->Wxhelppay($payContent);
$this->returnJson(['code' =>200, 'msg' => '创建订单信息成功', 'data' => $payinfo,'info' =>$decryptedData['phoneNumber']]);
}
else{
$this->returnJson(['code' =>401, 'msg' => '获取订单信息失败', 'data' => '']);
}
}
else{
$this->returnJson(['code' => 0, 'msg' => '请求数据有误,请核实', 'data' => ""]);
}
}
/* @todo 统一下单接口
*/
public function Wxhelppay($payContent){
$payment = Factory::payment($this->config);
$result = $payment->order->unify($payContent);
if ($result['result_code'] == 'SUCCESS' && $result['return_code'] == 'SUCCESS') {
$prepayId = $result['prepay_id'];
$jssdk = $payment->jssdk;
$config = $jssdk->sdkConfig($prepayId);
$config['timeStamp'] = $config['timestamp'];//此处需要将小写s变为大写
return $config;//(对应原理4)
}
else{
$this->returnJson(['code' => 0, 'msg' => '微信支付签名失败,data', 'data' => $result]);
}
}
/* * @todo 回调接口
*/
public function notify()
{
$payment = Factory::payment($this->config);
$response = $payment->handlePaidNotify(function ($message, $fail) {
if ($message['return_code'] === 'SUCCESS' && $message['result_code'] === 'SUCCESS') {
// 处理信息
$orderInfo = $this->OrderModel->where("order_id", $message['out_trade_no'])->find();
// 如果信息不存在直接返回错误信息
if (!$orderInfo) {
return $fail("订单信息不存在");
}
// 信息存在就判断当前订单的状态
if ($orderInfo['pay_status'] == 1 ) {
}
// 查询该笔订单是否已经支付过了
if ($message['return_code'] === 'SUCCESS') {
// 判断是否支付成功
if (isset($message['result_code']) && $message['result_code'] === 'SUCCESS') {
$this->OrderModel->startTrans();
try {
// 当前的订单支付成功
$this->OrderModel->where("order_id", $message['out_trade_no'])->update(['pay_status' => 1, 'paytime' => time(), 'description' => $message['transaction_id']]);
// 更新订单用户数据
$data['id']=$orderInfo['help_id'];
$data['help_status']=1;
$data['asset_number']=$message['cash_fee'];
$data['help_id']=$orderInfo['nickname'];
$data['help_phone']=$orderInfo['phone'];
$a=Children::getInstance()->update($data);
$this->OrderModel->commit();
return true;
} catch (\Exception $exception) {
$this->OrderModel->rollback();
return $fail($exception->getMessage());
}
}
} elseif ($message['result_code'] === 'FAIL') {
return true;
}
}
});
return $response->send();
}
微信支付 easy wechat 使用的更多相关文章
- H5使用codovar插件实现微信支付(微信APP支付模式,前端)
H5打包的app实现微信支付及支付宝支付,本章主要详解微信支付,支付宝支付请查看另一篇“H5使用codovar插件实现支付宝支付(支付宝APP支付模式,前端)” ps:本文只试用H5开发的,微信 AP ...
- Wechat 微信端调用“微信支付接口”的正确方式
微信端的项目中,比如微信商城之类的,肯定会涉及到微信支付这一块: 下面直接上详细的代码: var data = {--}; // 调用微信支付需要的数据 function onBridgeReady( ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
- url带#号,微信支付那些坑
现在前端很多框架的前端路由都带#号,主要为了做到无刷新跳转页面. 在微信公众号做微信支付时,配置的支付路径比如是http://www.eee.com/#/order,在调微信支付的方法时错误信息是'U ...
- iOS 微信支付总结
1.支付流程 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择 ...
- Atitit 微信支付 支付结果通用通知
Atitit 微信支付 支付结果通用通知 Wechat hto sh ma 返回页面return_url - 熊佳佳的博客 d ,only notyfi url-... 接口链接 该链接是通过[统一 ...
- 微信支付 总提示get_brand_wcpay_request:fail 也不跳转支付页面 的解决方案
最近在做微信支付,帮客户部署好环境后,测试微信支付,发现点击支付后老是提示: get_brand_wcpay_request:fail, 于是找到代码中调用微信支付的代码段: WeixinJSBrid ...
- PHP微信支付开发实例
这篇文章主要为大家详细介绍了PHP微信支付开发过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PHP微信支付开发过程,分享给大家,供大家参考,具体内容如下 1.开发环境 Thinkphp 3. ...
- [转]微信公众平台WeChat PHP SDK
地址:https://github.com/dodgepudding/wechat-php-sdk 微信公众平台php开发包,细化各项接口操作,支持链式调用 微信支付接入文档: https://mp. ...
- react-native 的微信SDK辅助包,支持微信登录、微信分享、微信支付
微信SDK集成示例,现已完成微信授权登录,之后将陆续包装分享等其他功能. ReactNative高级交流群 127482131 或访问 http://blog.1ygowu.com ReactNat ...
随机推荐
- websocket状态码
状态码 描述 0–999 保留段, 未使用 1000 正常关闭; 无论为何目的而创建, 该链接都已成功完成任务. 1001 终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开 ...
- 制作win10装机U盘
第一步:准备一个8G容量以上的U盘 第二步:制作系统盘. 进入windows官网 官网win10下载地址:https://www.microsoft.com/zh-cn/software-downlo ...
- python调用C库的方法
主要介绍两种,一种是python的标准库内置的ctype,另一种是第三方的pybind11. 除此之外,还有其他的方案,例如,CFFI.Cython等等. 一.python的标准库ctype
- django的注意事项
1 允许 0.0.0.0:8000 ALLOWED_HOSTS = ['*'] 2 py文件的import ,要新建一个文件夹 如tool,与manage.py同级 再去导入
- 钉钉群机器人群发[ PHP ]
// secret 机器人设置 - 加签秘钥 // access_token 机器人设置 - Webhook带此参数 // message 机器人设置- 关键词设置的内容需要和message一致 pu ...
- Xcode基础文件概念
Xcode基础概念 Schema.Target.Project 和 Workspace 是组成一个 Xcode 工程最核心的单元,也是我们首先需要理解的部分. Target Target 是我们工程中 ...
- 19c 滚动升级
一.环境说明 节点1 节点2 IP 192.168.3.77 192.168.3.88 DB 版本 Oracle 19.6.0.0.0 Oracle 19.6.0.0.0 OS 主机名 oadb1 ...
- vite vue插件打包配置
import { defineConfig, UserConfigExport, ConfigEnv } from "vite"; import externalGlobals f ...
- Codensity T408 视频转码器
Codensity T408 视频转码器 微信: orihard2014
- JS学习-PromiseWorker
PromiseWorker PromiseWorker是一个ChromeWorker,调用而不是postMessage()发送消息,而是调用post(),它返回一个Promise. PromiseWo ...