⼩程序web-view 调⽤H5页⾯判断环境并发起⼩程序⽀付接⼝⽰例完整代码⼩程序web-view调⽤H5页⾯发起⼩程序⽀付接⼝⽰例完整代码(内含详细说明,适应于Ecshop和Ectouch被⼩程序内嵌的时候 既要实现H5的⽀付 ⼜要实现 ⼩程序⽀付。当然其它内核的⾃营在线商城也是可以⽤这接⼝的)
⼩程序web-view 调⽤H5页⾯发起⼩程序⽀付接⼝⽰例
这接⼝是我熬夜写出来的,服务端⽤的PHP,⽰例很完整了,有附带说明。
您可以进>>发现>>⼩程序搜索:飞机杯男⽤ 进“飞机杯男⽤”这个⼩程序先看我做的接⼝演⽰,看这⽂章是不是您所需要的。当然⼩程序⾥⾯也有我的联系⽅式,可以通过⼩程序联系我,不忙的时可帮简单解答。希望能帮⼤家节省些时间。这⽀付接⼝可以⽤到ECtouch或其它thinkphp框架开发的站点。
接⼝说明
H5页⾯发起⼩程序⽀付代码:
看演⽰的可以进>>发现>>⼩程序搜索:飞机杯男⽤
也可以进>>发现>>⼩程序搜索:飞机杯图⽚
好了,做完发起⼩程序⽀付的js之后下⾯就是做⼩程序前端代码了,也就是发起的时候所⽤到的/pages/wxpay/wxpay接收⽂件:<script type="text/javascript" src="res.wx.qq/open/js/jweixin-1.3.2.js"></script><script language="javascript">var mini=false;Env(function(res){if (res.miniprogram){ //发起⼩程序⽀付 wx.miniProgram.navigateTo({url: "/pages/wxpay/wxpay?log_id='.$order['log_id'].'&order_id='.$order['order_id'].'"}); mini=true;}}); if(mini){ return;}else{ //发起H5⽀付}</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var app = getApp();Page({  data: {    bt: 'bt'  },  onLoad: function (options) {    var that = this;    if (der_id) {      //that.setData({ wdxop: options}),      that.setLoading(options);      // questPayment(options);    } else { wx.navigateBack();}  },  setLoading: function(a) {    var that = this    wx.login({      success: function(res) {        // 成功的话会返回:        // {errMsg: "login:ok", code: "获取⽤户OpenID 的ticket"}        de,a)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
好了,下⾯就是读取⽀付参数并⽣成签名发送给⼩程序的服务器端代码了:    wx.requestPayment(dat
a)  },  wdxreload: function(){        var pages = getCurrentPages();    var currentPage = pages[pages.length - 1]; //获取当前页⾯的对象    var url = ute; //当前页⾯url    var options = currentPage.options; //如果要获取url 中所带的参数可以查看options    wx.navigateTo({ url: "/pages/wxpay/wxpay?order_id=" + der_id+ '&log_id=' + options.log_id});  }  })
87
88
89
90
91
92
93
94
95
96
97
98
99
100<?php defined('IN_ECTOUCH') or die('Deny Access');class MiniPayController extends BaseController {  private $appid;  private $secret;  public function __construct() {  parent::__construct();    $payment_info = array();        $payment_info = model('Order')->payment_info(6);  $RcgPayment = unserialize_config($payment_info['pay_config']);    $this->appid  =  $RcgPayment ['miniAppid'];  //此处填写您的  ⼩程序appid      $this->secret  =  $RcgPayment ['miniSecret']; //您的⼩程序密钥  }  public function login() {    $params = array(    'appid' => $this->appid,    'secret' => $this->secret,    'js_code' => $_GET['js_code'], // ⼩程序传来的ticket    'grant_type' => 'authorization_code',  );  $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, 'api.weixin.qq/sns/jscode2session');  curl_setopt($ch, CURLOPT_RETURNTRANSFER,
1);  curl_setopt($ch, CURLOPT_POST, 1);  curl_setopt($ch, CURLOPT_POSTFIELDS, $params);  $output = curl_exec($ch);  if (false === $output) {    echo 'CURL Error:' . curl_error($ch);  }  echo $output;  }    public function index() {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;  $log_id = isset($_GET['log_id']) ? intval($_GET['log_id']) : 0;  $this->user_id = $_SESSION['user_id'];  $order = model('Users')->get_order_detail($order_id, $this->user_id);    $payment_info = array();        $payment_info = model('Order')->payment_info(6);  $payment = unserialize_config($payment_info['pay_config']);    $t = $_GET['t'];  $mch_id = $payment['wxpay_mchid'];//受理商ID(即⽀付商户号)  $mch_key = $payment['wxpay_key'];//商户⽀付密钥Key    $params = array(    'appid' => $this->appid,  // ⼩程序appid    'mch_id' => $mch_id,    'nonce_str' => (string) mt_rand(10000, 99999),  // 随机串,32字符以内    'body' => '⽇⽤品1',  // 商品名    'out_trade_no' => substr( $order['order_sn'].'A'.($order['order_amount']*100).'B'.$log_id ,0,32),  // 订单号32字符以内。串接后取前32位。多次⽀付时如果重
'total_fee' => $order['order_amount'] * 100,  // 订单费⽤,单位:分    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],    'notify_url' => 'm.chunyigu/api/notify/minipay.php',  // ⽀付成功后的回调地址,由腾讯服务端回调    'trade_type' => 'JSAPI',    'openid' => $_GET['openid'],  // ⼩程序传来的OpenID  );  // 按照要求计算sign  ksort($params);  $sequence = '';  foreach ($params as $key => $value) {    $sequence .= "$key=$value&";  }  $sequence = $sequence . "key=".$mch_key;  $params['sign'] = strtoupper(md5($sequence));  // 给发出的请求,整个参数是个XML  $xml = '<xml>' . PHP_EOL;  foreach ($params as $key => $value) {    $xml .= "<$key>$value</$key>" . PHP_EOL;  }  $xml .= '</xml>';  $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, 'h.weixin.qq/pay/unifiedorder');  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  curl_setopt($ch, CURLOPT_POST, 1);  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);  $output = curl_exec($ch);  if (false === $output) {    echo 'CURL Error:' . curl_error($ch);  }  // 下单成功的话,返回个XML ,⾥⾯包含prepayID ,提取出来  if (0 === preg_match('/<prepay_id><\!\[CDATA\[(\w+)\]\]><\/prepay_id>/', $output, $match)) {      //echo $output;    //exit(0);  }  // 这⾥不是给⼩程序返回个prepayID ,⽽是返回⼀个包含其他字段的JSON  // 这个JSON ⼩程序⾃⼰也可以⽣成,放在服务端⽣成是出于两个考虑:  // 1. ⼩程序的appid 不⽤写在⼩程序的代码⾥,appid 、secret 信息全部由服务器管理,⽐较安全464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
js获取json的key和value
// 1. ⼩程序的appid 不⽤写在⼩程序的代码⾥,appid 、secret 信息全部由服务器管理,⽐较安全  // 2. 计算paySign 需要⽤到md5,⼩程序端使⽤的是JavaScript ,没有内置的md5函数,放在服务端计算md5⽐较⽅便  $prepayId = $match[1];  $response= array(    'appId' => $this->appid,  //⼩程序appid    'nonceStr' => (string) mt_rand(10000, 99999),    // 随机串,32个字符以内    'package' => 'prepay_id=' . $prepayId,    'signType' => 'MD5',    'timeStamp' => (string) time(),    // 时间戳,注意得是字符串形式的  );  $sequence = '';  foreach ($response as $key => $value) {    $sequence .= "$key=$value&";  }  $response['paySign'] = strtoupper(md5("{$sequence}key=".$mch_key));  echo json_encode($response); }    /**    * 响应操作    */    function callback($data)    {        if ($_GET['status'] == 1) {            return true;        } else {            return false;        }    }    /**    * 响应操作    */    function notify($data)    {        $inputdata = file_get_contents("php://input");        if (! empty($inputdata)) {              $payment = model('Payment')->get_payment("wxpay");            $postdata = json_decode(json_encode(simplexml_load_string($inputdata, 'SimpleXMLElement', LIBXML_NOCDATA)), true);            /* 检查插件⽂件是否存在,如果存在则验证⽀付是否成功,否则则返回失败信息 */            // 端签名            $wxsign = $postdata['sign'];            unset($postdata['sign']);            // 附加参数            $attach = $postdata['attach'];            foreach ($postdata as $k => $v) {                $Parameters[$k] = $v;            }            // 签名步骤⼀:按字典序排序参数            ksort($Parameters);            $buff = "";            foreach ($Parameters as $k => $v) {       
        $buff .= $k . "=" . $v . "&";            }            $String;            if (strlen($buff) > 0) {                $String = substr($buff, 0, strlen($buff) - 1);            }            // 签名步骤⼆:在string 后加⼊KEY            $String = $String . "&key=" . $payment['wxpay_key'];111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。