最近公司在开发未支付,刚刚做出测试成功,腾讯平台的技术支持实在不敢恭维,死活联系不上,在测试过程中走了不少弯路,希望大家别像我一样走弯路。
微支付官网下载文档地址: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拼接错误的原因,可能是个时间戳错了,也可能是个商品单号错了,仔细检查一下

微支付开发部分代码示例相关推荐

  1. 微支付开发的各种问题 支付接口

    最近负责微支付接口的开发,在测试过程中走了不少弯路,希望大家别像我一样走弯路. 微支付官网下载文档地址:http://download.csdn.net/detail/ethan19/7193855, ...

  2. 【DDD】2万字讲解DDD,从理论到实战(代码示例)

    文章目录 基础概念 领域 限界上下文 贫血模型和充血模型 贫血模型 充血模型 实体和值对象 实体 值对象 聚合 聚合根 领域事件 领域事件相关案例 事件风暴 DDD分层架构 用户接口层 应用层 领域层 ...

  3. gmm聚类python_GMM-实现聚类的代码示例

    Matlab 代码: % GMM code function varargout = gmm(X, K_or_centroids) % input X:N-by-D data matrix % inp ...

  4. 微服务开发及部署_基于 Kubernetes 的微服务部署即代码

    在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...

  5. 支付宝PC扫码支付接入流程及代码示例

    准备工作 1:下载支付宝开放平台开发助手,使用助手工具生成应用公钥和应用私钥. 参考文档: 生成密钥 | 开放平台 2:给应用配置接口加签方式,此处的目的是将应用appid与应用公钥绑定. 参考文档: ...

  6. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )

    文章目录 前言 一.Android 端完整代码示例 二.Flutter 端完整代码示例 三.相关资源 前言 前置博客 : [Flutter]Flutter 混合开发 ( Flutter 与 Nativ ...

  7. 【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )

    文章目录 I . Native 调用 Java 方法 II . JNIEnv *env 与 jobject instance III . JavaVM *vm IV . 局部引用 与 全局引用 分析 ...

  8. java微信支付代码_Java微信支付之服务号支付代码示例

    Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servl ...

  9. 收集各种 iOS App 开发可以用到的代码示例

    code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例  cocoacontrols.com/ 英文版本的lib收集  objclibs.com/ 精品lib的收集网站 ...

  10. 【CSS】课程网站网页底部开发 ( 网页底部盒子模型测量及样式 | 代码示例 )

    文章目录 一.网页底部盒子模型测量及样式 1.盒子布局说明 2.底部的大盒子测量及样式 3.版心盒子 4.版权盒子 5.链接盒子 二.代码示例 1.HTML 标签结构 2.CSS 样式 3.显示效果 ...

最新文章

  1. Computer Browser服务不能启动
  2. Java中File类的createNewFile、mkdir与mkdirs区别
  3. Amazon Aurora 深度探索
  4. SAP Fiori和Vue的结合会给企业级应用软件的UI开发带来什么?
  5. ozf oracle,ORACLE EBS 简称大全
  6. 开始把其他的博客搬家到这里了
  7. Java实现用户头像上传(修改默认文件大小限制)
  8. 数据库设计规范 zhuan
  9. XILINX ZYNQ7100 的上电顺序
  10. ImportError: libcudart.so.9.2: cannot open shared object file: No such file or directory
  11. aar打包依赖 android_快速了解:十四、Android打包编译的进阶流程
  12. Windows CMD命令大全
  13. 传统推荐模型——协同过滤
  14. 论文阅读笔记(Region Proposal by Guided Anchoring)
  15. 利用java打印心型图案
  16. 浅谈综述论文:文献综述
  17. 我沪漂 16 年,再也不打工了!
  18. (第二章)HDMI基本工作原理
  19. 解决ublox无法定位问题(一直输出$GxTXT)
  20. 批量修改文件后缀名,文件名

热门文章

  1. win10有效清理c盘空间: 移动pagefile.sys和删除hiberfil.sys文件
  2. 高性能游戏计算机cpu的选择,玩游戏的电脑cpu选哪个
  3. 2020年度软件和信息技术服务竞争力前百家企业名单出炉 —— 旋极信息再次荣登榜单
  4. C# 中取绝对值的函数
  5. zigbee Zstack 中串口操作的深度解析、一
  6. 阿里云、腾讯云、UCloud、华为云云主机对比测试报告
  7. [android开源]简单富文本编辑器MRichEditor,图文混排算个啥
  8. 测试方案和测试策略的区别
  9. 1一9数字行书写法_阿拉伯数字1至9连笔
  10. 《财富自由》平民出身的富豪积累财富的原则和方法