微支付开发部分代码示例
最近公司在开发未支付,刚刚做出测试成功,腾讯平台的技术支持实在不敢恭维,死活联系不上,在测试过程中走了不少弯路,希望大家别像我一样走弯路。
微支付官网下载文档地址:http://download.csdn.net/detail/ethan19/7193855,
主要介绍JS API支付:
支付过程中,最主要的是数据处理,
首先,在Wxpayhelper.php中会处理各种你要使用的参数,比如out_trade_no,appid,partner,body等,
$this->load->library('Wxpayhelper');
$this->wxpayhelper->setParameter("bank_type", "WX");
$this->wxpayhelper->setParameter("body", "麦当劳");
$this->wxpayhelper->setParameter("partner", $partner);
$this->wxpayhelper->setParameter("out_trade_no", "NB12253018");
$this->wxpayhelper->setParameter("total_fee", "1");
$this->wxpayhelper->setParameter("fee_type", "1");
$this->wxpayhelper->setParameter("notify_url", $url);
$this->wxpayhelper->setParameter("spbill_create_ip", "127.0.0.1");
$this->wxpayhelper->setParameter("input_charset", "UTF-8");$msg=$this->wxpayhelper->create_biz_package();
自此形成$msg信息(,貌似是json),
然后下载一个JS API支付的事例代码,官网上有(https://mp.weixin.qq.com/htmledition/res/bussiness-course2/wxm-pay-api-demo.zip),可以看到一下js代码,运行代码,可以看到支付成功
<script language="javascript">// 当微信内置浏览器完成内部初始化后会触发WeixinJSBridgeReady事件。document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {//公众号支付jQuery('a#getBrandWCPayRequest').click(function(e){WeixinJSBridge.invoke('getBrandWCPayRequest',<?= $msg?>,function(res){if(res.err_msg == "get_brand_wcpay_request:ok" ) {// window.location.href="http://www.wepower365.com/order.php/order/re_pay";}else{//alert(11111111);}// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。//因此微信团队建议,当收到ok返回时,向商户后台询问是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此时未收到通知,商户后台主动调用查询订单接口,查询订单的当前状态,并反馈给前端展示相应的界面。}); });WeixinJSBridge.log('yo~ ready.');}, false)</script>
因为微信正式使用还需要测通其他接口(发货,告警,维权,还有一个隐形接口--订单查询)
暂时先写出发货,订单查询的接口
在所有接口我们要做的第一步就是获取access_token值
function getAccessToken($appid, $appsecret) {$ch = curl_init();@curl_setopt($ch, CURLOPT_URL, 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret‘);@curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);@curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);@curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);@curl_setopt($ch, CURLOPT_AUTOREFERER, 1);//@curl_setopt($ch, CURLOPT_POSTFIELDS, $data);@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$tmpInfo = curl_exec($ch);if (curl_errno($ch)) {return curl_error($ch);}curl_close($ch);return $tmpInfo;}
首先获取订单接口
详细参数可以看下载的接口文档
public function check_good(){$access_token= $this->getAccessToken();$reponse_array = json_decode($access_token);$access_token= $reponse_array->access_token;$sign = $this->getSign("out_trade_no","partner","PaySignKey");$app_signature = $this->getAppsignature("appid","PaySignKey","out_trade_no=NA1398414173343&partner=partner&sign=".$sign."","1397177957");$data='{"appid" : "appid","package" : "out_trade_no=NA1398414173343&partner=partner&sign='.$sign.'","timestamp" : "1397177957","app_signature" : "'.$app_signature.'","sign_method" : "sha1"}';//echo $data;exit;$result = $this->getContent($access_token,'orderquery',$data);$result_array = json_decode($result);print_r($result_array);exit;}private function getAppsignature($appid,$appkey,$package,$timestamp){$array=array("appid"=>$appid,"appkey"=>$appkey,"package"=>$package,"timestamp"=>$timestamp);$array = $this->formatBizQueryParaMap($array, false);return sha1($array);}private function formatBizQueryParaMap($paraMap, $urlencode){$buff = "";ksort($paraMap);foreach ($paraMap as $k => $v){// if (null != $v && "null" != $v && "sign" != $k) {if($urlencode){$v = urlencode($v);}$buff .= strtolower($k) . "=" . $v . "&";//}}$reqPar;if (strlen($buff) > 0) {$reqPar = substr($buff, 0, strlen($buff)-1);}return $reqPar;}private function getSign($number,$partner,$key){$content = "out_trade_no=".$number."&partner=".$partner."&key=".$key;$sign = strtoupper(md5($content));return $sign;}private function getContent($access_token,$way,$data){$ch = curl_init();@curl_setopt($ch, CURLOPT_URL, 'https://api.weixin.qq.com/pay/'.$way.'?access_token='.$access_token);@curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);@curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);@curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);@curl_setopt($ch, CURLOPT_AUTOREFERER, 1);@curl_setopt($ch, CURLOPT_POSTFIELDS, $data);@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$tmpInfo = curl_exec($ch);if (curl_errno($ch)) {return curl_error($ch);}curl_close($ch);return $tmpInfo;}
//发货接口
function deliver(){$access_token= $this->getAccessToken();$reponse_array = json_decode($access_token);$access_token= $reponse_array->access_token;$app_signature = $this->getAppsignature_d("appid","PaySignKey","ojggLjxMcdt9nAhO0dvNFr5vLIHE","1218347401201404133192821670","NB4321000","1397400108","1","ok");$data = '{"appid":"appid","openid":"ojggLjxMcdt9nAhO0dvNFr5vLIHE","transid":"1218347401201404133192821670","out_trade_no":"NB4321000","deliver_timestamp":"1397400108","deliver_status":"1","deliver_msg":"ok","app_signature":"'.$app_signature.'","sign_method" : "sha1"}';//var_dump($data);die;///"appid",//"openid",用户名//"transid"交易单号//"out_trade_no"第三方订单号//""deliver_timestamp""linux时间戳//"deliver_status"发货状态,1成功,0失败//"deliver_msg"一般ok,发货信息//"app_signature"签名//"sign_method",,"sha1"加密方式//app_signature签名生产方式//appid、appkey、openid、transid、out_trade_no、deliver_timestamp、deliver_status、deliver_msg;//注意点,时间保持一致,入库时间要和获取app_signature的时间保持一致$result = $this->getContent($access_token,'delivernotify',$data);$result_array = json_decode($result);var_dump($result_array);die;}public function getAppsignature_d($appid,$appkey,$openid,$transid,$out_trade_no,$deliver_timestamp,$deliver_status,$deliver_msg){$array=array("appid"=>"appid","appkey"=>$appkey,"openid"=>$openid,"transid"=>$transid,"out_trade_no"=>$out_trade_no,"deliver_timestamp"=>"1397400108","deliver_status"=>$deliver_status,"deliver_msg"=>$deliver_msg);$array = $this->formatBizQueryParaMap($array, false);return sha1($array);}
在拼接app_signature时经常或报49004的错误,这个是因为app_signature拼接错误的原因,可能是个时间戳错了,也可能是个商品单号错了,仔细检查一下
微支付开发部分代码示例相关推荐
- 微支付开发的各种问题 支付接口
最近负责微支付接口的开发,在测试过程中走了不少弯路,希望大家别像我一样走弯路. 微支付官网下载文档地址:http://download.csdn.net/detail/ethan19/7193855, ...
- 【DDD】2万字讲解DDD,从理论到实战(代码示例)
文章目录 基础概念 领域 限界上下文 贫血模型和充血模型 贫血模型 充血模型 实体和值对象 实体 值对象 聚合 聚合根 领域事件 领域事件相关案例 事件风暴 DDD分层架构 用户接口层 应用层 领域层 ...
- gmm聚类python_GMM-实现聚类的代码示例
Matlab 代码: % GMM code function varargout = gmm(X, K_or_centroids) % input X:N-by-D data matrix % inp ...
- 微服务开发及部署_基于 Kubernetes 的微服务部署即代码
在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...
- 支付宝PC扫码支付接入流程及代码示例
准备工作 1:下载支付宝开放平台开发助手,使用助手工具生成应用公钥和应用私钥. 参考文档: 生成密钥 | 开放平台 2:给应用配置接口加签方式,此处的目的是将应用appid与应用公钥绑定. 参考文档: ...
- 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )
文章目录 前言 一.Android 端完整代码示例 二.Flutter 端完整代码示例 三.相关资源 前言 前置博客 : [Flutter]Flutter 混合开发 ( Flutter 与 Nativ ...
- 【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )
文章目录 I . Native 调用 Java 方法 II . JNIEnv *env 与 jobject instance III . JavaVM *vm IV . 局部引用 与 全局引用 分析 ...
- java微信支付代码_Java微信支付之服务号支付代码示例
Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servl ...
- 收集各种 iOS App 开发可以用到的代码示例
code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 cocoacontrols.com/ 英文版本的lib收集 objclibs.com/ 精品lib的收集网站 ...
- 【CSS】课程网站网页底部开发 ( 网页底部盒子模型测量及样式 | 代码示例 )
文章目录 一.网页底部盒子模型测量及样式 1.盒子布局说明 2.底部的大盒子测量及样式 3.版心盒子 4.版权盒子 5.链接盒子 二.代码示例 1.HTML 标签结构 2.CSS 样式 3.显示效果 ...
最新文章
- Computer Browser服务不能启动
- Java中File类的createNewFile、mkdir与mkdirs区别
- Amazon Aurora 深度探索
- SAP Fiori和Vue的结合会给企业级应用软件的UI开发带来什么?
- ozf oracle,ORACLE EBS 简称大全
- 开始把其他的博客搬家到这里了
- Java实现用户头像上传(修改默认文件大小限制)
- 数据库设计规范 zhuan
- XILINX ZYNQ7100 的上电顺序
- ImportError: libcudart.so.9.2: cannot open shared object file: No such file or directory
- aar打包依赖 android_快速了解:十四、Android打包编译的进阶流程
- Windows CMD命令大全
- 传统推荐模型——协同过滤
- 论文阅读笔记(Region Proposal by Guided Anchoring)
- 利用java打印心型图案
- 浅谈综述论文:文献综述
- 我沪漂 16 年,再也不打工了!
- (第二章)HDMI基本工作原理
- 解决ublox无法定位问题(一直输出$GxTXT)
- 批量修改文件后缀名,文件名
热门文章
- win10有效清理c盘空间: 移动pagefile.sys和删除hiberfil.sys文件
- 高性能游戏计算机cpu的选择,玩游戏的电脑cpu选哪个
- 2020年度软件和信息技术服务竞争力前百家企业名单出炉 —— 旋极信息再次荣登榜单
- C# 中取绝对值的函数
- zigbee Zstack 中串口操作的深度解析、一
- 阿里云、腾讯云、UCloud、华为云云主机对比测试报告
- [android开源]简单富文本编辑器MRichEditor,图文混排算个啥
- 测试方案和测试策略的区别
- 1一9数字行书写法_阿拉伯数字1至9连笔
- 《财富自由》平民出身的富豪积累财富的原则和方法