微信app支付接入后端php数据签名方式
我们先看看微信app支付的流程
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。
步骤5:商户后台接收支付通知。
步骤6:商户后台查询支付结果。
我们再看看微信支付app端的代码
appayBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String url="https://wxpay.wxutil.com/pub_v2/app/app_pay.php"; Button payBtn = (Button) findViewById(R.id.appay_btn); payBtn.setEnabled(false); Toast.makeText(MainActivity.this, "获取订单中...", Toast.LENGTH_SHORT).show(); try{ byte[] buf = HttpUtil.httpGet(url); if (buf != null && buf.length > 0) { String content = new String(buf); Log.e("get server pay params:",content); JSONObject json = new JSONObject(content); if(null != json) ){ PayReq req = new PayReq(); req.appId = json.getString("appid"); req.partnerId = json.getString("partnerid"); req.prepayId = json.getString("prepayid"); req.nonceStr = json.getString("noncestr"); req.timeStamp = json.getString("timestamp"); req.packageValue = json.getString("package"); req.sign = json.getString("sign"); req.extData = "app data"; // optional Toast.makeText(MainActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show(); // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信 Log.e("wangbo", "checkArgs=" + req.checkArgs()); boolean ret=api.sendReq(req); Log.e("wangbo", "ret=" + ret); }else{ Log.e("PAY_GET", "返回错误"+json.getString("retmsg")); Toast.makeText(MainActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show(); } }else{ Log.d("PAY_GET", "服务器请求错误"); Toast.makeText(MainActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show(); } }catch(Exception e){ Log.e("PAY_GET", "异常:"+e.getMessage()); Toast.makeText(MainActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show(); } payBtn.setEnabled(true); } });
通过上面app的代码我们可以看到后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付!官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
下面我看看后台怎么生成预支付交易单和签名的
<?php echo apppay('订单号','价格'); //直接输出json给前台APP //入口函数 function apppay($order_num,$price){ $json = array(); //生成预支付交易单的必选参数: $newPara = array(); //应用ID $newPara["appid"] = "商户appid"; //商户号 $newPara["mch_id"] = "商户id"; //设备号 $newPara["device_info"] = "WEB"; //随机字符串,这里推荐使用函数生成 $newPara["nonce_str"] = createNonc...
点击查看剩余70%
网友评论0