There are several.
Node js: https://github.com/ShenNoether/monero-nodejs
I think the node and php libraries are for interacting more with simplewallet in particular, but the Python library is for both daemon and wallet I believe.
I'm assuming the monero-wallet-rpc is on the same host as the website.
In init.php, define a username and password for the rpc wallet:
// RPC login credentials for monero-wallet-rpc. Use --rpc-login user:pass when starting the rpc wallet.
// Example: monero-wallet-rpc --rpc-login user:pass --wallet-file wallet.bin --rpc-bind-ip 127.0.0.1 --rpc-bind-port ...
For python, you can use MoneroPy. It is still pre-beta and under development, but has pure python implementations for wallet account creation, TX Extra parsing, integrated address encoding and decoding, transaction ID generation, and other goodies. Speed improvements and Monero Core library wrappers are planned for offloading calculations to same code at ...
I would suggest creating a subaddress per customer. Therefore, you will be calling the RPC method create_address (if using the monero-wallet-rpc directly), or the equivalent method in your referenced PHP wrapper library.
To check for incoming payments, you can use incoming_transfers (or the equivalent library method). Depending on your use case, you can ...
Your log shows you converting the string '0.1253721' to 106372099999.99998, which is an invalid amount. Whereas your other string '0.1253728' gets converted to 106372800000.0, which is passing through OK. The number sent to the wallet RPC should be an integer.
Your function _buildTransfer is the culprit. Either cast when assigning or wrap in intval(...). E....
The wallet RPC and daemon RPC are different. Refer to the projects documentation on how to run both wallet and daemon RPCs.
The node you reference at node.xmr.to is a daemon RPC, not a wallet RPC, therefore you cannot use it for any of the wallet commands, only daemon commands.
To use a wallet RPC (like you are trying to do from php), you have to run ...