微信小程序支付 (一、生成prepay_id) 2018-08-06

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序支付 (一、生成prepay_id) 2018-08-06相关的知识,希望对你有一定的参考价值。

参考技术A 微信公众平台: 微信公众平台

https://mp.weixin.qq.com/

商户平台: 商户平台

https://pay.weixin.qq.com/index.php/core/home/login

开发手册 api 是: 

https://pay.weixin.qq.com/wiki/doc/api/index.html

https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

生成XML的测试接口: 测试接口

https://pay.weixin.qq.com/wiki/tools/signverify/

32位随机码生成器

1 配置参数, 一个都不能少(这些都是必填的,还有其他选填的参数,也可以随心情填写)

    appid        此小程序的唯一标识 例如:wxed9dxxx6d6cxxx9e

    body        可以写商品描述 例如:我是商品描述,用户买了两个馒头

    mch_id    商户id 需在 商户平台  查看(申请商户平台成功就会得到) 如: 149411***2

    nonce_str    随机字符串(别带小数点(没考证 感觉)) 例如:76521019851170500000

    notify_url    成功后的通知地址 例如:https://baidu.top/callbackofpay

    openid        用户的唯一标识 在用户使用小程序的时候通过其 code 换取 openid 

                        例如: obxgc5CgBbgKDrvcxxxxxJ-xxxxx

    out_trade_no        商户订单号 例如:20180805740161 需要无重复

    spbill_create_ip    终端ip(服务器的ip)貌似 127.0.0.1 就行

    total_fee                此单的交易额度(钱 money) 例如:888 单位是 分钱。及8.88元钱 ( 注意是数值型,非字符型,除此之外其他的都是字符型 )

    trade_type    小程序用 'JSAPI' 其他看api

2 将以上参数(必要参数一个不能少)按照 key 字典排序,进行拼接。

例如: appid=wxedxxx2xxx6c03e9e&body=我是商品描述,用户买了两个馒头.&mch_id=149411***2&nonce_str=76521019851170500000 ......

3 在结尾加上 商户的秘钥 mch_key (需在商户平台配置 在:账户中心-->账户设置-->API安全-->API秘钥 ,可以用 32位随机码生成器  生成)

    + "&key=" + mch_key

5 对拼接成的字符串,进行md5加密-->转大写 -->生成 签名 sign

    例如: 425F6561A654B366B5519F000CF2AE61

6 将以上参数拼成  xml

let _xmlUnifiedorder = `

            $myObj.appid

            $myObj.body

            $myObj.mch_id

            $myObj.nonce_str

            $myObj.notify_url

            $myObj.openid

            $myObj.out_trade_no

            $myObj.spbill_create_ip

            $myObj.total_fee

            $myObj.trade_type

            $sign

        `;

7 携带参数 post 访问  https://api.mch.weixin.qq.com/pay/unifiedorder 接口

    如果正确 会成功得到 xml格式的  prepay_id ,如果签名错误进行下面的错误查找。

    ~~:进行错误查找  可以拿出参数在  测试接口  进行测试 ,无异常可以正常生成 xml之后,如果还报错。

    试着 更改 商户平台的秘钥 (详细请看第 3 步)。貌似很多人都踩这个雷了  ...

<code>

// 字典排序 key1=xxx&key2=zzz 拼接成字符串

function joinToStr(_obj)

    let keyArr = [];

    for (let key in _obj)

        keyArr.push(key);

   

    keyArr = keyArr.sort();

    console.log("keyArrSort--->", keyArr);

    //    paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6

    // _str 是 paySign 中MD5 包裹的字符串部分

    let _str = "";

    let len = keyArr.length;

    for (let i = 0; i < len; i++)

        if (i == len - 1)

            _str += (keyArr[i] + "=" + _obj[keyArr[i]]);

        else

            _str += (keyArr[i] + "=" + _obj[keyArr[i]] + "&");

       

   

    return _str;



</code>

以上是关于微信小程序支付 (一、生成prepay_id) 2018-08-06的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序篇(微信小程序的支付)

微信小程序篇(微信小程序的支付)转载 “微信小程序联盟”

微信小程序之wx.requestPayment 发起微信支付

uniapp 微信支付(亲测可支付)

uniapp 微信支付(亲测可支付)

小程序在线支付